GUI
创建图形化界面:
1.创建frame窗体。
2.对窗体基本设置:比如:大小,位置,布局。
3.定义组件。
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示,通过setVisible(true)方法。
事件监听机制的特点:
1.事件源。就是awt包或者swing包中的那些图形界面组件。
2.事件。每一个事件源都有自己特有的对应事件和共性事件。
3.监听器。将可以触发某一个事件的动作(不只一个动作)都已经封装到监听器中。
以上三者,在java中已经定义好,直接获取对象来用就可以。
4.事件处理。这才是我们需要做的。
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; class AwtDemo { public static void main(String[] args) { Frame f=new Frame("my awt");//创建窗体,里面组件的默认布局是边界布局 f.setSize(500,400); f.setLocation(300,200);//窗体的位置坐标 f.setLayout(new FlowLayout()); Button b=new Button("我是一个按钮"); f.add(b); // f.addWindowListener(new MyWin());//添加一个监听器对象到窗体的添加监听器方法。 //通常通过匿名内部类的方法 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e)//接收窗口关闭事件 { sop("我关"); System.exit(0); } public void windowOpened(WindowEvent e)//窗口被打开 { sop("我被打开了"); } public void windowActivated(WindowEvent e)//窗口被前置 { sop("我活了"); } }); f.setVisible(true);//设置是否可见 } /* class MyWin implements WindowListener { //继承此接口需要覆盖7个方法,可是我们只用到了关闭动作。 //其他动作都没有用到 } 因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。 并覆盖了其中的所有方法,那么我们 只要继承自WindowAdapter覆盖我需要的方法即可 */ public static void sop(Object obj) { System.out.println(obj); } } class MyWin extends WindowAdapter//触发器类 { public void windowClosing(WindowEvent e) { System.out.println("window closing"+e.toString()); System.exit(0); } }</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; class FrameDemo { //定义该图形中所需要的组件的引用 private Frame f; private Button but; FrameDemo()//构造方法 { init(); } public void init() { f=new Frame("my frame"); //对frame进行基本设置 f.setBounds(300,100,600,500);//位置和长宽 f.setLayout(new FlowLayout()); but=new Button("my button"); //将组件添加到frame中 f.add(but); //加载一下窗体上事件 myEvent(); //显示窗体 f.setVisible(true); } private void myEvent()//最好要把所有要加载的事件放在一个方法中 { f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); //参照窗体事件的过程,写出按钮的事件过程。 but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e)//添加对应事件 { sop("按钮干的"); System.exit(0); } }); } public static void main(String[] args) { new FrameDemo(); } public static void sop(Object obj) { System.out.println(obj); } } </span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; class FrameDemo { private Frame f; private Button but; private TextField tf; FrameDemo() { init(); } public void init() { f=new Frame("my frame"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf=new TextField(10);//初始化带列数 but=new Button("my button"); f.add(tf); f.add(but); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); tf.addKeyListener(new KeyAdapter()//只允许文本框添加数字 { public void keyPressed(KeyEvent e) { int code=e.getKeyCode(); if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)) {sop(code+"...是非法数据"); e.consume();//该方法使得:不会用默认的处理方式处理这个事件。 //也就是,原来是让非数字的输入进入到文本框,现在不允许他进入 } } }); but.addActionListener(new ActionListener()//按钮的活动监听 { public void actionPerformed(ActionEvent e) { sop("action ok"); } }); but.addMouseListener(new MouseAdapter()//在按钮上添加鼠标监听 { private int count=1; private int clickCount=1; public void mouseEntered(MouseEvent e) { sop("鼠标进入到该组件"+count++); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) sop("双击动作"+clickCount++); } }); but.addKeyListener(new KeyAdapter(){//键盘事件 public void keyPressed(KeyEvent e) { /* KeyText(e.getKeyCode()):根据键的码获得键的符号。 sop(KeyEvent.getKeyText(e.getKeyCode())+"::"+e.getKeyCode()); if(e.getKeyCode()==KeyEvent.VK_ENTER)//按下回车键退出 System.exit(0); */ //如果control键被按下,再按回车的组合键,打印。 if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) sop("ctrl+enter is run"); } }); } public static void main(String[] args) { new FrameDemo(); } public static void sop(Object obj) { System.out.println(obj); } } </span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; import java.io.*; class MyWindowDemo { private Frame f; private TextField tf; private Button but; private TextArea ta; private Dialog d;//对话框 private Label lab; private Button okBut; MyWindowDemo() { init(); } public void init() { f=new Frame("my window"); f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); tf=new TextField(60); but=new Button("转到"); ta=new TextArea(25,70);//15行40列 d=new Dialog(f,"提示信息-self",true);//对话框初始化,true模式,不操作对话框就不能操作窗体。 d.setBounds(400,200,240,150); d.setLayout(new FlowLayout()); lab=new Label(); okBut=new Button("确定"); d.add(lab); d.add(okBut); f.add(tf); f.add(but); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter()//窗体关闭 { public void windowClosing(WindowEvent e) { System.exit(0); } }); d.addWindowListener(new WindowAdapter()//对话框关闭 { public void windowClosing(WindowEvent e) { d.setVisible(false); } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER) { showDir(); } } });//回车充当转到的功能 okBut.addActionListener(new ActionListener()//点击对话框里的ok按钮 { public void actionPerformed(ActionEvent e) { d.setVisible(false); } }); but.addActionListener(new ActionListener()//转到按钮 { public void actionPerformed(ActionEvent e) { showDir(); } }); } private void showDir() { String dirPath=tf.getText(); File dir=new File(dirPath);//将路径封装成文件对象 if(dir.exists() && dir.isDirectory()) { ta.setText("");//现将文本框原来的内容清掉 String[] names=dir.list(); for(String name:names) { ta.append(name+"\r\n");//将遍历的文件追加到文本区域 } } // tf.setText(""); else { String info=("你输入的信息"+dirPath+"是错误的,请重新输入"); lab.setText(info); d.setVisible(true); } } public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { new MyWindowDemo(); } }</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">import java.awt.*; import java.awt.event.*; import java.io.*; public class MyMenuDemo { private Frame f; private MenuBar mb;//菜单栏 private Menu m,subMenu;//菜单 private MenuItem closeItem,subItem,openItem,saveItem;//菜单项 private FileDialog openDia,saveDia; private TextArea ta; private File file; MyMenuDemo() { init(); } public void init() { f=new Frame("my windwo"); f.setBounds(300,100,650,600); //f.setLayout(new FlowLayout());//不设置布局,默认为边界布局,让文本区域随着窗口走 mb=new MenuBar(); ta=new TextArea(); m=new Menu("文件"); subItem=new MenuItem("子条目"); openItem=new MenuItem("打开"); saveItem=new MenuItem("保存"); subMenu=new Menu("子菜单"); closeItem=new MenuItem("退出"); openDia=new FileDialog(f,"我要打开",FileDialog.LOAD); saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE); f.setMenuBar(mb);//注意此处是set不是add mb.add(m); m.add(subMenu); subMenu.add(subItem); m.add(openItem); m.add(saveItem); m.add(closeItem); f.add(ta); myEvent(); f.setVisible(true); } private void myEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); openItem.addActionListener(new ActionListener()//打开菜单项 { public void actionPerformed(ActionEvent e) { openDia.setVisible(true); //怎么知道你选的哪个文件?去dialog类找方法。 String dirPath=openDia.getDirectory(); String fileName=openDia.getFile(); sop(dirPath+".."+fileName); if(dirPath==null||fileName==null) return; ta.setText("");//当选取有效文件时,清空文本区域 //封装对象 File file=new File(dirPath,fileName);//据路径名和名字创建一个新 File 实例。 try { BufferedReader bufr=new BufferedReader(new FileReader(file)); String line=null; while((line=bufr.readLine())!=null) { ta.append(line+"\r\n"); } } catch (IOException ex) { throw new RuntimeException("读取失败"); } } }); saveItem.addActionListener(new ActionListener()//保存菜单项 { public void actionPerformed(ActionEvent e) { if(file==null)//如果文件为空,即还没有创建文件 { saveDia.setVisible(true); String dirPath=saveDia.getDirectory(); String fileName=saveDia.getFile(); if(dirPath==null||fileName==null) return; file=new File(dirPath,fileName); } //如果文件已经存在,直接将数据 写入到文件即可 try { BufferedWriter bufw=new BufferedWriter(new FileWriter(file)); String text=ta.getText(); bufw.write(text); bufw.close(); } catch (IOException ey) { throw new RuntimeException(""); } } }); closeItem.addActionListener(new ActionListener()//关闭菜单项 { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { new MyMenuDemo(); } public static void sop(Object obj) { System.out.println(obj); } }</span>