黑马程序员 Java自学总结十五 GUI

来源:互联网 发布:中世纪2优化mod哪个好 编辑:程序博客网 时间:2024/04/28 09:42

------ ASP.Net+Android+IO开发.Net培训期待与您交流! ------

总结内容来源于黑马毕老师的java基础教学视频


GUI

Graphical User Interface(图形用户接口),用图形的方式,来显示计算机操作的界面

JavaGUI提供的对象都在java.awtjavax.swing这两个包中。

AwtSwing

java.awtabstractWindow ToolKit(抽象窗口工具集,需要调用本地系统方法实现功能,属于重量级(是指跟平台结合紧密)控件。

javax.swing:在AWT的基础上,建立的一套图形界面系统,其中提供更多的组件,而且完全由java实现,增强了移植性,属于轻量级(与重量级相反)控件。

创建图形化界面:

1.创建Frame窗体

2.对窗体进行基本设置:大小setSize(横向,纵向),

                         位置setLocation(横坐标,纵坐标),

                         布局setLayout(布局类的对象).

3.定义组件.

4.将组件通过窗体的add方法添加到窗体中.

5.让窗体显示,通过setVisible(true).

事件监听机制的特点:

1.事件源:就是awt包和swing包中的图形界面组件.

2.事件:每一个事件源都有自己特有的对应事件和共性事件.

          事件包括:窗体事件,Action事件,鼠标事件,键盘事件等.

3.监听器:将可以触发某一个事件的动作(不止一个)都已经封装到了监听器中.

                        

          以上三者,java中都已经定义好.直接获取对象用就可以了

4.事件处理:我们只需要对产生的动作进行处理.

[java] view plaincopy
  1. import java.awt.*;  
  2. import java.awt.*;  
  3. import java.awt.event.*;  
  4. class  AwtDemo  
  5. {  
  6.      public static void main(String[] args)  
  7.      {  
  8.           Frame f = new Frame("my awt");  
  9.           f.setSize(500,400);//设置Frame大小  
  10.           f.setLocation(500,200);//设置Frame位置  
  11.   
  12.           //设置Frame布局  
  13.           f.setLayout(new FlowLayout());  
  14.   
  15.           Button b = new Button("按钮");  
  16.           f.add(b);//把按钮组件添加到Frame中  
  17.   
  18.           //添加监听事件  
  19.           f.addWindowListener(new MyWin());  
  20.   
  21.           f.setVisible(true);//设置Frame可见  
  22.      }  
  23. }  
  24.   
  25. class MyWin extends WindowAdapter  
  26. {  
  27.      //复写windowClosing方法,实现关闭动作  
  28.      public void windowClosing(WindowEvent e)  
  29.      {  
  30.           System.out.println("我被关闭了");  
  31.           System.exit(0);  
  32.      }  
  33.      //复写windowActivated方法  
  34.      public void windowActivated(WindowEvent e)  
  35.      {  
  36.           System.out.println("我被激活了");  
  37.      }  
  38.      //复写windowOpened方法  
  39.      public void windowOpened(WindowEvent e)  
  40.      {  
  41.           System.out.println("我被打开了");  
  42.      }  
  43. }  
组件Frame和Button触发事件
[java] view plaincopy
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3.   
  4. //想要知道组件具备什么样的监听器,需要查看该组件的对象的功能.  
  5.   
  6. class FrameDemo  
  7. {  
  8.      private Frame f;  
  9.      private Button b;  
  10.      FrameDemo()  
  11.      {  
  12.           init();  
  13.      }  
  14.      public void init()  
  15.      {  
  16.           f = new Frame("my frame");  
  17.   
  18.           //对frame进行基本设置,setBounds()相当于setLocation()和setSize()  
  19.           f.setBounds(300,100,500,400);  
  20.           f.setLayout(new FlowLayout());  
  21.   
  22.           b = new Button("my button");  
  23.   
  24.           //将按钮组件添加到frame中  
  25.           f.add(b);  
  26.   
  27.           //加载一下窗体上的事件  
  28.           MyEvent();  
  29.   
  30.           //显示frame  
  31.           f.setVisible(true);  
  32.      }  
  33.   
  34.      public void MyEvent()  
  35.      {  
  36.           f.addWindowListener(new WindowAdapter()  
  37.           {  
  38.                public void windowClosing(WindowEvent e)  
  39.                {  
  40.                     System.exit(0);  
  41.                }  
  42.           });  
  43.           b.addActionListener(new ActionListener()  
  44.           {  
  45.                public void actionPerformed(ActionEvent e)  
  46.                {  
  47.                     System.out.println("退出,是按钮干的");  
  48.                     System.exit(0);  
  49.                }  
  50.           });  
  51.      }  
  52.   
  53.      public static void main(String[] args)  
  54.      {  
  55.           new FrameDemo();  
  56.      }  
  57. }  
GUI--鼠标和键盘事件

[java] view plaincopy
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3. class MouAndKeyDemo  
  4. {  
  5.      private Frame f;  
  6.      private Button b;  
  7.      private TextField tf;  
  8.      MouAndKeyDemo()  
  9.      {  
  10.           init();  
  11.      }  
  12.      public void init()  
  13.      {  
  14.           f = new Frame("my frame");  
  15.   
  16.           //对frame进行基本设置,setBounds()相当于setLocation()和setSize()  
  17.           f.setBounds(300,100,500,400);  
  18.           f.setLayout(new FlowLayout());  
  19.            
  20.           //建立一个文本框对象,设定长度20,并添加到frame中  
  21.           tf = new TextField(20);           
  22.           f.add(tf);  
  23.   
  24.           //将按钮组件添加到frame中  
  25.           b = new Button("my button");  
  26.           f.add(b);  
  27.   
  28.           //调用我的事件方法  
  29.           MyEvent();  
  30.   
  31.           //显示frame  
  32.           f.setVisible(true);  
  33.      }  
  34.   
  35.      public void MyEvent()  
  36.      {  
  37.           //为TextField添加一个键盘监听器  
  38.           tf.addKeyListener(new KeyAdapter()  
  39.           {  
  40.                //定义一个只能在文本框中输入数字的方法  
  41.                public void keyPressed(KeyEvent e)  
  42.                {  
  43.                     int code = e.getKeyCode();  
  44.                     if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))  
  45.                     {  
  46.                          System.out.println("你输入了非法的字符"+code);  
  47.                          //该键盘动作取消  
  48.                          e.consume();  
  49.                     }  
  50.                }  
  51.           });  
  52.           //为farme添加一个窗口监听器  
  53.           f.addWindowListener(new WindowAdapter()  
  54.           {  
  55.                //复写WindowAdapter类中的'关闭窗口'方法  
  56.                public void windowClosing(WindowEvent e)  
  57.                {  
  58.                     System.exit(0);  
  59.                }  
  60.           });  
  61.           //为button添加一个键盘监听器  
  62.           b.addKeyListener(new KeyAdapter()  
  63.           {  
  64.                //复写KeyAdapter类中的'键盘键入'方法  
  65.                public void keyPressed(KeyEvent e)  
  66.                {  
  67.                     if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)  
  68.                          System.exit(0);  
  69.                     String s = e.getKeyText(e.getKeyCode());  
  70.                     System.out.println(s+".."+e.getKeyCode());  
  71.                }  
  72.           });  
  73.           //为button添加一个活动监听器  
  74.           b.addActionListener(new ActionListener()  
  75.           {  
  76.                public void actionPerformed(ActionEvent e)  
  77.                {  
  78.                     System.out.println("action on");  
  79.                }  
  80.           });  
  81.           //为button添加一个鼠标监听器  
  82.           b.addMouseListener(new MouseAdapter()  
  83.           {  
  84.                private int count = 1;  
  85.                private int clickcount = 1;  
  86.                //鼠标指向事件  
  87.                public void mouseEntered(MouseEvent e)  
  88.                {  
  89.                     System.out.println("鼠标进入到该组件"+count++);  
  90.                }  
  91.                //鼠标点击事件  
  92.                public void mouseClicked(MouseEvent e)  
  93.                {  
  94.                     if(e.getClickCount()==2)  
  95.                          System.out.println("鼠标双击一次"+clickcount++);  
  96.                }  
  97.           });  
  98.      }  
  99.   
  100.      public static void main(String[] args)  
  101.      {  
  102.           new MouAndKeyDemo();  
  103.      }  
  104. }  

列出指定目录内容

[java] view plaincopy
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3. import java.io.*;  
  4. /* 
  5. 会用到的知识点包括 
  6. Frame ,Button ,TextField ,TextArea ,Dialog ,Label 
  7. 需求,列出指定目录的内容. 
  8.  
  9. 分析: 
  10. 1.一个Frame,一个TextField用来输入指定路径, 
  11.  
  12. 2.一个Area用来存文件名,一个Button用来确认输入的路径是否正确,如果正确, 
  13.      则取出TextField中输入的数据,先判断用数据是否存在,是否是目录,如果是, 
  14.      用File的list()方法取出目录下的文件名称存放到String[]数组中,然后用 
  15.      高级for循环遍历数组,并把文件名字存放到TextArea中. 
  16. */  
  17.   
  18. class  MyWindowDemo  
  19. {  
  20.      private Frame f;  
  21.      private Button b;  
  22.      private TextField tf;  
  23.      private TextArea ta;  
  24.   
  25.      private Dialog dl;  
  26.      private Label l;  
  27.      private Button okBur;  
  28.      MyWindowDemo()  
  29.      {  
  30.           init();  
  31.      }  
  32.      public void init()  
  33.      {  
  34.           f = new Frame("my frame");  
  35.           f.setBounds(500,100,600,500);  
  36.           f.setLayout(new FlowLayout());  
  37.           f.setVisible(true);  
  38.            
  39.           tf = new TextField(65);  
  40.           f.add(tf);  
  41.           b = new Button("转到");  
  42.           f.add(b);  
  43.           ta = new TextArea(25,72);  
  44.           f.add(ta);  
  45.   
  46.           dl = new Dialog(f,"提示信息-self",true);  
  47.           dl.setBounds(400,200,240,120);  
  48.           dl.setLayout(new FlowLayout());  
  49.           l = new Label();  
  50.           okBur = new Button("确定");  
  51.           dl.add(okBur);  
  52.   
  53.           myEvent();  
  54.      }  
  55.      public void myEvent()  
  56.      {  
  57.           //关闭Frame  
  58.           f.addWindowListener(new WindowAdapter()  
  59.           {  
  60.                public void windowClosing(WindowEvent e)  
  61.                {  
  62.                     System.exit(0);  
  63.                }  
  64.           });  
  65.           okBur.addActionListener(new ActionListener()  
  66.           {  
  67.                public void actionPerformed(ActionEvent e)  
  68.                {  
  69.                     dl.setVisible(false);  
  70.                }  
  71.           });  
  72.           //为TextField添加键盘监听器  
  73.           tf.addKeyListener(new KeyAdapter()  
  74.           {  
  75.                public void keyPressed(KeyEvent e)  
  76.                {  
  77.                     //实现敲回车就能实现Button的功能  
  78.                     if (e.getKeyCode() == KeyEvent.VK_ENTER)  
  79.                     {  
  80.                          ta.setText("");  
  81.                          String s = tf.getText();  
  82.                          File file = new File(s);  
  83.                          if (file.exists() && file.isDirectory())  
  84.                          {  
  85.                               String[] names = file.list();  
  86.                               for(String name : names)  
  87.                               {  
  88.                                    ta.append(name+"\r\n");  
  89.                               }  
  90.                               tf.setText("");  
  91.                          }  
  92.                          else  
  93.                          {  
  94.                               dl.add(l);  
  95.                               l.setText("你输入的目录无效");  
  96.                               dl.setVisible(true);  
  97.                              tf.setText("");  
  98.                          }  
  99.                     }  
  100.                }  
  101.           });  
  102.           //为按钮添加一个Action监听器  
  103.           b.addActionListener(new ActionListener()  
  104.           {  
  105.                public void actionPerformed(ActionEvent e)  
  106.                {  
  107.                     String s = tf.getText();  
  108.                     File file = new File(s);  
  109.                     if (file.exists() && file.isDirectory())  
  110.                     {  
  111.                          String[] names = file.list();  
  112.                          for(String name : names)  
  113.                          {  
  114.                               ta.append(name+"\r\n");  
  115.                          }  
  116.                          tf.setText("");  
  117.                     }  
  118.                     else  
  119.                     {  
  120.                          dl.add(l);  
  121.                          l.setText("你输入的目录无效");  
  122.                          dl.setVisible(true);  
  123.                          tf.setText("");  
  124.                     }  
  125.                }  
  126.           });  
  127.      }  
  128.   
  129.      public static void main(String[] args)  
  130.      {  
  131.           new MyWindowDemo();  
  132.      }  
  133. }  

文件的打开和保存

[java] view plaincopy
  1. //会用到的知识点包括  
  2. //Frame, MenuBar, Menu, MenuItem, FileDialog, TextArea  
  3. package mymenu;  
  4. import java.awt.*;  
  5. import java.awt.event.*;  
  6. import java.io.*;  
  7. public class MyMenuDemo  
  8. {  
  9.      private Frame f;  
  10.      private MenuBar mb;  
  11.      private Menu m;  
  12.      private Menu subm;  
  13.      private MenuItem mi;  
  14.      private MenuItem submi;  
  15.      private MenuItem openmi,savemi;  
  16.      private FileDialog fd;  
  17.      private File file;  
  18.      private TextArea ta;  
  19.      MyMenuDemo()  
  20.      {  
  21.           init();  
  22.      }  
  23.      public void init()  
  24.      {  
  25.           f = new Frame("my window");  
  26.           f.setBounds(300,100,650,600);  
  27.   
  28.           ta = new TextArea();  
  29.   
  30.           mb = new MenuBar();  
  31.           ta = new TextArea();  
  32.           m = new Menu("文件");  
  33.           subm = new Menu("子菜单");  
  34.   
  35.           mb.add(m);  
  36.           openmi = new MenuItem("打开");  
  37.           savemi = new MenuItem("保存");  
  38.           mi = new MenuItem("退出");  
  39.           submi = new MenuItem("子项");  
  40.           subm.add(submi);  
  41.           m.add(subm);  
  42.           m.add(openmi);  
  43.           m.add(savemi);  
  44.           m.add(mi);  
  45.   
  46.           f.setMenuBar(mb);  
  47.           f.add(ta);  
  48.           f.setVisible(true);  
  49.           myEvent();  
  50.   
  51.      }  
  52.      public void myEvent()  
  53.      {  
  54.           f.addWindowListener(new WindowAdapter()  
  55.           {  
  56.                public void windowClosing(WindowEvent e)  
  57.                {  
  58.                     System.exit(0);  
  59.                }  
  60.           });  
  61.           //打开事件  
  62.           openmi.addActionListener(new ActionListener()  
  63.           {  
  64.                public void actionPerformed(ActionEvent e)  
  65.                {  
  66.                     fd = new FileDialog(f,"open",FileDialog.LOAD);  
  67.                     fd.setVisible(true);  
  68.                     try  
  69.                     {      
  70.                          ta.setText("");  
  71.                          //如果点了Filedialog的取消,就直接结束.  
  72.                          if(fd.getDirectory()==null || fd.getFile()==null)  
  73.                               return ;  
  74.                          file = new File(fd.getDirectory(),fd.getFile());  
  75.                          System.out.println(file);  
  76.                          BufferedReader br =  
  77.                               new BufferedReader(new FileReader(file));  
  78.                          String line = null;  
  79.                          while ((line=br.readLine())!=null)  
  80.                          {  
  81.                               ta.append(line+"\r\n");  
  82.                          }  
  83.                          br.close();  
  84.                     }  
  85.                     catch (IOException ex)  
  86.                     {  
  87.                          throw new RuntimeException("该文件类型不匹配");  
  88.                     }  
  89.                      
  90.                }  
  91.           });  
  92.           //保存事件  
  93.           savemi.addActionListener(new ActionListener()  
  94.           {  
  95.                public void actionPerformed(ActionEvent e)  
  96.                {  
  97.                     //判断文件是否已经存在,不存在就弹出Filedialog  
  98.                     if (file==null)  
  99.                     {  
  100.                          fd = new FileDialog(f,"save",FileDialog.SAVE);  
  101.                          fd.setVisible(true);  
  102.                          //如果点了Filedialog的取消,就直接结束  
  103.                          if(fd.getDirectory()==null || fd.getFile()==null)  
  104.                               return ;  
  105.                          file = new File(fd.getDirectory(),fd.getFile());  
  106.                     }  
  107.                     try  
  108.                     {  
  109.                          BufferedWriter bw =  
  110.                               new BufferedWriter(new FileWriter(file));  
  111.                          bw.write(ta.getText());  
  112.                          bw.close();  
  113.                     }  
  114.                     catch (IOException ex)  
  115.                     {  
  116.                          throw new RuntimeException("创建文件失败");  
  117.                     }  
  118.                }  
  119.           });  
  120.           mi.addActionListener(new ActionListener()  
  121.           {  
  122.                public void actionPerformed(ActionEvent e)  
  123.                {  
  124.                     System.exit(0);  
  125.                }  
  126.           });  
  127.      }  
  128.      public static void main(String[] args)  
  129.      {  
  130.           new MyMenuDemo();  
  131.      }  
  132. }  

GUI双击jar包执行

写好读到GUI程序,可以封装成jar包,通过对系统进行设置,使得双击jar包后,程序可以执行。以上边的写的记事本程序为例:

操作步骤:

1.在源文件的第一行加上包:package mymenu

2.dos命令行中启动“javac  -d  c:\myclass MyMenuTest.java”命令。

3.menu包所在目录下,新建一个名为“1.txt”的文本文档,里边录入一下内容:

Main-Class: mymenu.MyMenuTest

注意:1,冒号后面要有一个空格;2,末尾一定要加换行符,即敲一下Enter键。

4.dos切换到c:\myclass目录下,启动”jar cvfm my.jar 1.txt mymenu”命令,这时得到的jar包即可启动。


------ ASP.Net+Android+IO开发.Net培训期待与您交流! ------