java电子白板代码,开源电子白板

关于JAVA的问题。求教达人

你这个还没有注册监听之类的吧...所以按了都没有反应

创新互联-专业网站定制、快速模板网站建设、高性价比宁洱网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式宁洱网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖宁洱地区。费用合理售后完善,十多年实体公司更值得信赖。

我这里有个我写的记事本程序你可以看看...不懂的在交流..我QQ718596512

/**

* 记事本程序

* 打开,保存支持的文件

* 可以使用快捷键操作(JMenu项是ALT+字母)

* 可以修改背景色,设置字体大小,种类

* 为JMenuItem添加快捷键JmenuItem jmi=new JmenuItem("打开",'O');

* 键盘加速器即在不打开菜单的情况下自行打开相应菜单项的功能

* jmi1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));

* 实现格式即字体窗格(JColorChooser,JSlider)

* 使用到

* JMenuBar JMenu JMenuItem JTextArea JScrollPane

* UIManager JFileChooser FileInputStream FileOutPutStream

* FileFilter(javax.swing.filechooser.FileFilter 另外是java.io中的一个接口)

* 实现弹出菜单JPopupMenu使用鼠标适配器 类实现(MouseAdapter)

* 没有实现查找--虽然查找很简单但是要将它在jta中定位貌似不好搞

*/

package com.happy;

import javax.swing.*;

import javax.swing.border.TitledBorder;

//注意这个包是必须的

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

import javax.swing.filechooser.FileFilter;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.awt.event.MouseAdapter;

public class NotePadWin extends JFrame implements ActionListener{

/**

*

*/

private static final long serialVersionUID = 1L;

/**

* @param args

*/

//数据成员

JMenuBar jmb=null;

JMenu jm1=null;//文件

JMenu jm2=null;//编辑

JMenu jm3=null;//格式

JMenu jm4=null;//帮助

JPopupMenu jpm=null;

JMenuItem jmi1=null;

JMenuItem jmi2=null;

JMenuItem jmi3=null;

JMenuItem jmi33=null;

JMenuItem jmi4=null;

JMenuItem jmi44=null;

JMenuItem jmi5=null;

JMenuItem jmi6=null;

JMenuItem jmi7=null;

JMenuItem jmi8=null;

JMenuItem jmi9=null;

JMenuItem jmi99=null;

JMenuItem jmi10=null;

static JTextArea jta=null;

JScrollPane jsp=null;

JFileChooser jfc=null;

//记录当前文本内容

StringBuffer con=null;

FontWin fw=null;

public NotePadWin(){

//实例化

jmb=new JMenuBar();

jm1=new JMenu("文件(F)");

jm2=new JMenu("编辑(Z)");

jm3=new JMenu("格式(G)");

jm4=new JMenu("帮助(H)");

//添加快捷键

jm1.setMnemonic('F');

jm2.setMnemonic('Z');

jm3.setMnemonic('G');

jm4.setMnemonic('H');

//这样的快捷键必须打开菜单才有效

jmi1=new JMenuItem("新建(N)",'N');

jmi2=new JMenuItem("打开(O)",'O');

jmi3=new JMenuItem("保存(S)",'S');

jmi33=new JMenuItem("保存(S)");

jmi4=new JMenuItem("退出(E)",'E');

jmi44=new JMenuItem("退出(E)");

//设置键盘加速器

jmi1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));

jmi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));

jmi3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));

jmi4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));

jm1.add(jmi1);

jm1.add(jmi2);

jm1.add(jmi3);

// 添加分隔线

jm1.addSeparator();

jm1.add(jmi4);

jmi5=new JMenuItem("查找");

jmi6=new JMenuItem("全选");

jm2.add(jmi5);

jm2.add(jmi6);

jmi7=new JMenuItem("帮助主题");

jmi7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));

jmi8=new JMenuItem("关于");

jm4.add(jmi7);

jm4.add(jmi8);

jmi9=new JMenuItem("字体");

jmi99=new JMenuItem("字体");

jm3.add(jmi9);

jmb.add(jm1);

jmb.add(jm2);

jmb.add(jm3);

jmb.add(jm4);

jpm=new JPopupMenu();

jpm.add(jmi33);

jpm.add(jmi99);

jpm.add(jmi44);

jta=new JTextArea();

jta.setBorder(new TitledBorder("文本域"));

//添加鼠标适配器

jta.addMouseListener(new MouseAdapter(){

public void mouseReleased(MouseEvent e){

if(e.getButton()==MouseEvent.BUTTON3){

System.out.println("ff");

jpm.show(e.getComponent(), e.getX(), e.getY());

}

}

});

jsp=new JScrollPane(jta,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

jfc=new JFileChooser();

//添加文件过滤器

jfc.addChoosableFileFilter(new MyFileFilter("java"));

jfc.addChoosableFileFilter(new MyFileFilter("txt"));

jfc.addChoosableFileFilter(new MyFileFilter("c"));

jfc.addChoosableFileFilter(new MyFileFilter("cpp"));

jfc.addChoosableFileFilter(new MyFileFilter("lrc"));

jfc.addChoosableFileFilter(new MyFileFilter("h"));

//注册监听器

jmi1.addActionListener(this);

jmi2.addActionListener(this);

jmi3.addActionListener(this);

jmi33.addActionListener(this);

jmi4.addActionListener(this);

jmi44.addActionListener(this);

jmi5.addActionListener(this);

jmi6.addActionListener(this);

jmi7.addActionListener(this);

jmi8.addActionListener(this);

jmi9.addActionListener(this);

jmi99.addActionListener(this);

//添加菜单栏和文本域

this.setJMenuBar(jmb);

this.add(jsp);

}

//主函数

public static void main(String[] args) {

// TODO Auto-generated method stub

//设置当前程序的UI

try {

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (UnsupportedLookAndFeelException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

NotePadWin notepad=new NotePadWin();

notepad.setSize(400,300);

notepad.setTitle("我的记事本");

notepad.setVisible(true);

notepad.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

//事件处理函数

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

JMenuItem t=(JMenuItem)e.getSource();

//处理新建

if(t==jmi1){

newFile();

}

//打开

if(t==jmi2){

openFile();

}

//保存文件

if(t==jmi3||t==jmi33){

saveFile();

}

//退出

if(t==jmi4||t==jmi44){

myExit();

}

//帮助

if(t==jmi7){

JOptionPane.showMessageDialog(null, "这个记事本可以打开基本的文本文件\n"

+"包括*.java,*.class,*.cpp,*.h,*.lrc,*.txt\n"

+"为了避免与系统热键冲突对于全选.复制.粘贴等没有实现");

}

//关于

if(t==jmi8){

JOptionPane.showMessageDialog(null, "一个简单的记事本\n"

+"仅供学习研究之用\n"+"作者:高兴亮 \n"+"2010-11-30");

}

//字体

if(t==jmi9||t==jmi99){

fontSet();

}

}

public void saveFile(){

File file=null;

int flag=jfc.showSaveDialog(this);

jfc.setApproveButtonText("保存");

jfc.setDialogTitle("保存文件.....");

FileOutputStream fos=null;

if(flag==JFileChooser.APPROVE_OPTION){

file=jfc.getSelectedFile();

try {

fos=new FileOutputStream(file);

try {

fos.write(jta.getText().getBytes());

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}finally{

if(fos!=null){

try {

fos.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

}

}

public void openFile(){

String str=null;

File file=null;

jfc.setApproveButtonText("确定");

jfc.setDialogTitle("打开文件....");

FileInputStream fis=null;

//打开窗口.返回值

int flag=jfc.showOpenDialog(this);

//打开文件

if(flag==JFileChooser.APPROVE_OPTION){

file=jfc.getSelectedFile();

String name=file.getName().substring(file.getName().lastIndexOf('.')+1).toLowerCase();

//约束打开文件类型

if(name.equals("java")||name.equals("txt")||name.equals("h")

||name.equals("lrc")||name.equals("cpp")||name.equals("class")){

//得到文件内容

try {

fis=new FileInputStream(file);

byte buf[]=new byte[1024];

int n=0;

try {

while((n=fis.read(buf))!=-1){

str+=new String(buf,0,n);

}

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

jta.setText(str);

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}finally{

if(fis!=null){

try {

fis.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

}

}else{

//test

System.out.println("未打开文件");

}

}

public void fontSet(){

fw=new FontWin();

}

public void myExit(){

//文本域有内容

if(jta.getText().length()!=0){

int ii=JOptionPane.showConfirmDialog(null, "是否保存文件");

//用户选择是

if(ii==0){

saveFile();

System.exit(0);

}else if(ii==1){

System.exit(0);

}else{

System.exit(0);

}

}else{

System.exit(0);

}

}

public void newFile(){

//文本域有内容

if(jta.getText().length()!=0){

int ii=JOptionPane.showConfirmDialog(null, "是否保存文件");

//用户选择是

if(ii==0){

saveFile();

}else if(ii==1){

jta.setText("");

}else{

System.out.println("error");

}

}

}

}

//我的文件过滤器实现对打开文件的限制

class MyFileFilter extends FileFilter{

//文件后缀

String str;

public MyFileFilter(String str) {

super();

this.str = str;

}

//当目录里面的文件与要求的相同时返回true,并将该文件显示在文件对话框中

@Override

public boolean accept(File file) {

// TODO Auto-generated method stub

//如果文件是目录

if(file.isDirectory()){

return true;

}

String fileName=file.getName();

if(fileName.substring(fileName.lastIndexOf('.')+1).equalsIgnoreCase(str)){

return true;

}

return false;

}

//返回描述文件对应的描述

public String getDescription(){

String des=new String();

if(str.equalsIgnoreCase("java")){

des="java file";

}else if(str.equalsIgnoreCase("class")){

des="java class file";

}else if(str.equalsIgnoreCase("txt")){

des="text file";

}else if(str.equalsIgnoreCase("cpp")){

des="c++ file";

}else if(str.equalsIgnoreCase("h")){

des="c/c++ header file";

}else if(str.equalsIgnoreCase("lrc")){

des="lrc file";

}else

des="";

return des;

}

}

//字体控制窗口

class FontWin extends JFrame implements ActionListener,ChangeListener{

//字体种类

JComboBox jcb=null;

//颜色(文本域的颜色)

JColorChooser jcc=null;

//字体大小

JSlider js=null;

//示例

JTextArea jta=null;

JScrollPane jsp=null;

//控制按钮

JButton jbt1=null;

JButton jbt2=null;

JButton jbt3=null;

String[] fonts=null;

//定义此次操作是否有效

Font curFont=null;

Color color=new Color(0);

public FontWin(){

//初始化字体种类

GraphicsEnvironment e=GraphicsEnvironment.getLocalGraphicsEnvironment();

fonts=e.getAvailableFontFamilyNames();

jcb=new JComboBox(fonts);

jcb.addActionListener(this);

//初始化Jcc

//jcc=new JColorChooser(Color.white);

//color=jcc.showDialog(jf, "颜色选择器", Color.white);

jbt1=new JButton("确定");

jbt2=new JButton("取消");

jbt3=new JButton("颜色选择器");

jbt1.addActionListener(this);

jbt2.addActionListener(this);

jbt3.addActionListener(this);

jta=new JTextArea(30,30);

jta.setText("我的记事本\n"+"my notepad");

jta.setEditable(true);

jta.setBorder(new TitledBorder("示例"));

jsp=new JScrollPane(jta,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

//字体大小在10-50

js=new JSlider(10,50);

js.setMajorTickSpacing(10);

js.setMinorTickSpacing(1);

js.setPaintTicks(true);

js.setPaintLabels(true);

//滑到整数附近

js.setSnapToTicks(true);

js.addChangeListener(this);

JPanel jpa1=new JPanel();

jpa1.add(jcb);

jpa1.add(js);

JPanel jpa2=new JPanel();

jpa2.add(jbt3);

jpa2.add(jbt1);

jpa2.add(jbt2);

JPanel jpa3=new JPanel();

jpa3.add(jsp,BorderLayout.CENTER);

this.add(jpa1,BorderLayout.NORTH);

this.add(jpa3,BorderLayout.CENTER);

this.add(jpa2,BorderLayout.SOUTH);

this.setSize(400, 200);

this.setLocation(200, 200);

this.setVisible(true);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

this.setTitle("字体选择器");

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==jcb){

String curFontName=(String)jcb.getSelectedItem();

int curFontSize=js.getValue();

Font f=new Font(curFontName,Font.PLAIN,curFontSize);

jta.setFont(f);

}

//颜色选择器

if(e.getSource()==jbt3){

jcc=new JColorChooser(Color.white);

color=JColorChooser.showDialog(this, "颜色选择器", Color.white);

jta.setBackground(color);

}

if(e.getSource()==jbt1){

String curFontName=(String)jcb.getSelectedItem();

int curFontSize=js.getValue();

curFont=new Font(curFontName,Font.PLAIN,curFontSize);

//color=color;

NotePadWin.jta.setFont(curFont);

NotePadWin.jta.setBackground(color);

this.dispose();

}

if(e.getSource()==jbt2){

this.dispose();

}

}

//js

@Override

public void stateChanged(ChangeEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==js){

String curFontName=(String)jcb.getSelectedItem();

int curFontSize=js.getValue();

Font f=new Font(curFontName,Font.PLAIN,curFontSize);

jta.setFont(f);

}

}

public Font getCurFont() {

return curFont;

}

public Color getColor() {

return color;

}

}

求助高手用java编写一个用于网络教学的电子白板

我这里有,不过怎么能在这里留下。别人是不会把代码留到这里的。我还可以给你介绍个人他哪里也有QQ 42396542 祝你好运了。呵呵。。

给讲讲java接口的概念!

希望你仔细阅读。对初学者来说,接口不是很好理解。我教过的学生也都提出过这个问题。

我们来看一个类

class A {

private int a;

public int getA() {

return a;

}

}

这个类的属性是私有的,外界不能访问,而外界可以通过公有方法来访问这个类。我们说一个类的公有方法就是这个类的对外接口。通常

一个类的属性都是私有的,方法大多是公有的。外界只能过个这些公有方法来访问类。这也是Java封装性的体现。如果一个类没有公有属性,

也没有公有方法,这个类就是无法使用的类了。所以我们需要为一个类提供对外接口。

一个类中的方法,不只是说明了它要“做什么”,而且方法的内容也说明了“怎么做”。打个不太恰当的例子,一个杀人方法。从名字上

看,你知道了“做什么”,但没有办法看到“怎么做”。而方法的内容说明了“怎么做”。

class killer {

private String name;

private int age;

private String phone;

private String addr;

......

public void kill(Person p) {

Qiang qiang = new Qiang("ak47");

qiang.fire(p);

}

}

这个类的kill方法内容说明了杀人的过程。如果你不想用这种方式杀人。因为你很BT,你想用毒药杀人。那么这个类的内容就需要改。但

是,还有很多其它的“客户”,需要用不同的方式杀人。怎么办呢?一个很好的办法就是,我们只定义“做什么”,而不定义“怎么做”。

interface Killer {

public void kill(Person p);

}

接口说明了“做什么”,而实现这个接口的类,也就是实现类需要说明“怎么做”。

class Killer1 implements Killer {

public void kill(Person p) {

Qiang qiang = new Qiang("ak47");

qiang.fire(p);

}

}

class Killer2 implements Killer {

public void kill(Person p) {

Bane bane = new Bane();

p.eat(bane);

}

}

public class Test {

public static void main(String[] args) {

Killer jingKe = new Killer1();

Person yingZheng = new Person();

jingKe.kill(yingZheng);

}

}

接口可以把“做什么”和“怎么做”分离开来。这给Java带来了很多好处。虽然代码量增加了,可我们的程序的可维护性加强了。我们的程序是可以拆分的。就象电脑一样,可以拆分成很多组件。我一直在想,如果我的MP3耳机可以拆分就好了,那样在耳机只坏掉一个的时候就不用重新买一个了。

不过上面的例子看不到什么太大的好处。你可能会说,如果你

的目的是为了不修改代码,那么,如果我想使用Killer2来完成任务,还是需要修改main方法为:Killer jingKe = new Killer2();。没有错,

不过你可以通过一个工厂来完成上面的任务。也就是说,不通过new语句来获得Killer对象,而是通过工厂来获得Killer对象。

public class KillerFactory {

public static killer getKiller() {

return new Killer1();

}

public static Killer getKiller(String path) throws Exception {

Properties prop = new Properties();

prop.load(new FileInputStream(path));

String className = prop.getProperty("killer");

Class clazz = Class.forName(className);

return (Killer)clazz.newInstance();

}

}

代码确实增加了很多,可是这对后期的系统维修和系统升级带来了很多好处。

水龙头与出水管的关系,我们需要把水龙头安装到出水管上。如果有一天我们需要更换水龙头时,只需要把老的水龙头拆卸下来,把新的

水龙头安装到出水管上既可。如果水龙头与出水管是一体的,就是无法拆卸的怎么办呢?或是说出水管只能安装水龙头,而不能安装淋浴器,

这就使我们生活很不方便。我们可以理解为出水管的连接方法,连接的对象是“出水设备”,而这个“出水设备”是一个接口。而水龙头与淋

浴器都是这个接口的实现类。但是接口在哪里呢?它长什么样子?我们没看到。它是一个标准,连接处的内径与外径。螺丝抠的密度等。这就

和你的电脑上为什么可以连接USB设备一样。如果电脑和某一个USB设备电焊到一起,那么其它的USB设备就无法使用了。电脑使用的是实现了

USB接口的电子设备,而我们的U盘、MP3、移动硬盘及鼠标都是USB接口的实现类。

用Java写出来的程序也和我们现实生活中的设备一样。如电脑,我们希望电脑的所有部件都可以更换,如果主板上的内存插槽与内存条不

附。我们说,内存条没有实现某某接口。Java是完全面向对象的,而面向对象是我们最为熟悉的东东。面向对象并不简单,而是我们太熟悉它

了。所以我们学习Java会很方便。在现实社会中,所有的标准到了Java中都是接口。一盒香烟多少支烟,烟的长度等都是标准。一个光盘的大

小。Java中的JDBC就是一个标准,而各大数据库厂商及第三方厂商实现了这一标准。JDBC只说明了目的,没有说明怎么完成的目的。

面向对象就在我们眼前,不过我们有时不太注意它。希望你在今后学习Java时,多与现实社会联系。这样可以有利与你的理解。

代码量加大了,但对后期的维护与升级提供了方便。软件公司卖给客户的是class文件,而不是java文件。如果你的客户需要更换Killer对

象,只需修改资源文件既可。

下面我们来看一个定时器类。现在什么都是自动化的,如空调、电视、洗衣机等等。都要用到定时器这个类。对了,还有定时炸弹也要用

它。那我们可不可以只写一个定时器类,应用到所有的需要定时器的设备上呢?答案是肯定的,我们需要这个类。

好了,我们来分析一下定时器需要完成什么工作吧。定时器应该有启动、停止方法。定时器启动之后,每过一定时间就执行某个动作。其

中时间间隔为long型,而要执行的动作可能是输出一个字符串,也可能是打印作业。具体要干什么由使用定时器的用户来完成。而定义定时器

时,根本就不知道要干什么。

public class Timmer {

private long time;

private Action action;

public Timmer() {}

public Timmer(long time, Action action) {

this.time = time;

this.action = action;

}

public void start() {

state = START;

if(th == null) {

th = new Thread() {

public void run() {

while(state == START) {

try {

Thread.sleep(time);

action.action();

} catch(Exception e) {

}

}

}

};

}

th.start();

}

public void stop() {

state = STOP;

}

public void setTime(long time) {

this.time = time;

}

public void setAction(Action action) {

this.action = action;

}

public long getTime() {

return (this.time);

}

public Action getAction() {

return (this.action);

}

}

Action是一个接口,它只有一个方法,就是要完成的任务。我们在定时器启动时调用这个接口的方法。而这个Action接口的对象,代表一

个动作,这个动作就是用户要完成的动作。

public interface Action {

public void action();

}

public static void main(String[] args) {

Timer t = new Timer(2000, new Action() {

public void action() {

System.out.println("Hello World!");

}

});

t.start();

javax.swing.JOptionPane.showMessageDialog(null, "点击确定按钮停止定时器");

t.stop();

System.exit(0);

}

这是一个典型的回调方法例子。在AWT中,java使用了大量的监听器。这些监听器都是回调方法。在XML解析器SAX中,也使用了回调方法来解析XML文档。

接口要比抽象类还要抽象。抽象类需要子类继承,而Java是单继承,所以抽象类被限制了。而接口不同,一个类可以实现多个接口。好比人类与程序员类之间的关系。可以说程序员是人类的子类,如果程序员是一个接口。用人类的子类来实现它就会更好。这个子类还可以去实现会计接口、音乐家接口等等。

在struts2.0、spring、hibernate等框架中,都大量使用接口。我们关心的是某个接口与另一个接口之间的关系。而不关心某个实现类与另一个接口实现类的关系。在客观世界中,我们交谈时都大量使用接口,只是我们没有注意罢了。如:我公司需要一个程序员(一个实现了程序员接口的对象)。上课时,讲师有一台计算机,用白板笔在白板上写字(计算机是接口,白板及白板笔也是接口)。讲师希望学生能学会所有的知识(讲师及学生都是接口)。

就说这么多了,还有什么不明白可以与我联系。QQ:51038648

我在北京中科院计算所培训中心做兼职java讲师。我的经验是,要想学好Java,一定要多打代码、吃透代码。如果不勤奋,就一定学不好。看来你是刚刚开始学习Java,你后面的路还很长,而且不是很好走。


网页名称:java电子白板代码,开源电子白板
转载来于:http://csdahua.cn/article/heipjj.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流