现在的位置: 首页 > 综合 > 正文

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

2014年01月15日 ⁄ 综合 ⁄ 共 7944字 ⁄ 字号 评论关闭

------android培训,java培训,期待与您交流-----

总结内容来源于黑马毕老师的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.事件处理:我们只需要对产生的动作进行处理.

import java.awt.*;
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);//设置Frame大小
          f.setLocation(500,200);//设置Frame位置

          //设置Frame布局
          f.setLayout(new FlowLayout());

          Button b = new Button("按钮");
          f.add(b);//把按钮组件添加到Frame中

          //添加监听事件
          f.addWindowListener(new MyWin());

          f.setVisible(true);//设置Frame可见
     }
}

class MyWin extends WindowAdapter
{
     //复写windowClosing方法,实现关闭动作
     public void windowClosing(WindowEvent e)
     {
          System.out.println("我被关闭了");
          System.exit(0);
     }
     //复写windowActivated方法
     public void windowActivated(WindowEvent e)
     {
          System.out.println("我被激活了");
     }
     //复写windowOpened方法
     public void windowOpened(WindowEvent e)
     {
          System.out.println("我被打开了");
     }
}

组件Frame和Button触发事件

import java.awt.*;
import java.awt.event.*;

//想要知道组件具备什么样的监听器,需要查看该组件的对象的功能.

class FrameDemo
{
     private Frame f;
     private Button b;
     FrameDemo()
     {
          init();
     }
     public void init()
     {
          f = new Frame("my frame");

          //对frame进行基本设置,setBounds()相当于setLocation()和setSize()
          f.setBounds(300,100,500,400);
          f.setLayout(new FlowLayout());

          b = new Button("my button");

          //将按钮组件添加到frame中
          f.add(b);

          //加载一下窗体上的事件
          MyEvent();

          //显示frame
          f.setVisible(true);
     }

     public void MyEvent()
     {
          f.addWindowListener(new WindowAdapter()
          {
               public void windowClosing(WindowEvent e)
               {
                    System.exit(0);
               }
          });
          b.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    System.out.println("退出,是按钮干的");
                    System.exit(0);
               }
          });
     }

     public static void main(String[] args)
     {
          new FrameDemo();
     }
}

GUI--鼠标和键盘事件

import java.awt.*;
import java.awt.event.*;
class MouAndKeyDemo
{
     private Frame f;
     private Button b;
     private TextField tf;
     MouAndKeyDemo()
     {
          init();
     }
     public void init()
     {
          f = new Frame("my frame");

          //对frame进行基本设置,setBounds()相当于setLocation()和setSize()
          f.setBounds(300,100,500,400);
          f.setLayout(new FlowLayout());
         
          //建立一个文本框对象,设定长度20,并添加到frame中
          tf = new TextField(20);         
          f.add(tf);

          //将按钮组件添加到frame中
          b = new Button("my button");
          f.add(b);

          //调用我的事件方法
          MyEvent();

          //显示frame
          f.setVisible(true);
     }

     public void MyEvent()
     {
          //为TextField添加一个键盘监听器
          tf.addKeyListener(new KeyAdapter()
          {
               //定义一个只能在文本框中输入数字的方法
               public void keyPressed(KeyEvent e)
               {
                    int code = e.getKeyCode();
                    if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
                    {
                         System.out.println("你输入了非法的字符"+code);
                         //该键盘动作取消
                         e.consume();
                    }
               }
          });
          //为farme添加一个窗口监听器
          f.addWindowListener(new WindowAdapter()
          {
               //复写WindowAdapter类中的'关闭窗口'方法
               public void windowClosing(WindowEvent e)
               {
                    System.exit(0);
               }
          });
          //为button添加一个键盘监听器
          b.addKeyListener(new KeyAdapter()
          {
               //复写KeyAdapter类中的'键盘键入'方法
               public void keyPressed(KeyEvent e)
               {
                    if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
                         System.exit(0);
                    String s = e.getKeyText(e.getKeyCode());
                    System.out.println(s+".."+e.getKeyCode());
               }
          });
          //为button添加一个活动监听器
          b.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    System.out.println("action on");
               }
          });
          //为button添加一个鼠标监听器
          b.addMouseListener(new MouseAdapter()
          {
               private int count = 1;
               private int clickcount = 1;
               //鼠标指向事件
               public void mouseEntered(MouseEvent e)
               {
                    System.out.println("鼠标进入到该组件"+count++);
               }
               //鼠标点击事件
               public void mouseClicked(MouseEvent e)
               {
                    if(e.getClickCount()==2)
                         System.out.println("鼠标双击一次"+clickcount++);
               }
          });
     }

     public static void main(String[] args)
     {
          new MouAndKeyDemo();
     }
}

列出指定目录内容

import java.awt.*;
import java.awt.event.*;
import java.io.*;
/*
会用到的知识点包括
Frame ,Button ,TextField ,TextArea ,Dialog ,Label
需求,列出指定目录的内容.

分析:
1.一个Frame,一个TextField用来输入指定路径,

2.一个Area用来存文件名,一个Button用来确认输入的路径是否正确,如果正确,
     则取出TextField中输入的数据,先判断用数据是否存在,是否是目录,如果是,
     用File的list()方法取出目录下的文件名称存放到String[]数组中,然后用
     高级for循环遍历数组,并把文件名字存放到TextArea中.
*/

class  MyWindowDemo
{
     private Frame f;
     private Button b;
     private TextField tf;
     private TextArea ta;

     private Dialog dl;
     private Label l;
     private Button okBur;
     MyWindowDemo()
     {
          init();
     }
     public void init()
     {
          f = new Frame("my frame");
          f.setBounds(500,100,600,500);
          f.setLayout(new FlowLayout());
          f.setVisible(true);
         
          tf = new TextField(65);
          f.add(tf);
          b = new Button("转到");
          f.add(b);
          ta = new TextArea(25,72);
          f.add(ta);

          dl = new Dialog(f,"提示信息-self",true);
          dl.setBounds(400,200,240,120);
          dl.setLayout(new FlowLayout());
          l = new Label();
          okBur = new Button("确定");
          dl.add(okBur);

          myEvent();
     }
     public void myEvent()
     {
          //关闭Frame
          f.addWindowListener(new WindowAdapter()
          {
               public void windowClosing(WindowEvent e)
               {
                    System.exit(0);
               }
          });
          okBur.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    dl.setVisible(false);
               }
          });
          //为TextField添加键盘监听器
          tf.addKeyListener(new KeyAdapter()
          {
               public void keyPressed(KeyEvent e)
               {
                    //实现敲回车就能实现Button的功能
                    if (e.getKeyCode() == KeyEvent.VK_ENTER)
                    {
                         ta.setText("");
                         String s = tf.getText();
                         File file = new File(s);
                         if (file.exists() && file.isDirectory())
                         {
                              String[] names = file.list();
                              for(String name : names)
                              {
                                   ta.append(name+"\r\n");
                              }
                              tf.setText("");
                         }
                         else
                         {
                              dl.add(l);
                              l.setText("你输入的目录无效");
                              dl.setVisible(true);
                             tf.setText("");
                         }
                    }
               }
          });
          //为按钮添加一个Action监听器
          b.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    String s = tf.getText();
                    File file = new File(s);
                    if (file.exists() && file.isDirectory())
                    {
                         String[] names = file.list();
                         for(String name : names)
                         {
                              ta.append(name+"\r\n");
                         }
                         tf.setText("");
                    }
                    else
                    {
                         dl.add(l);
                         l.setText("你输入的目录无效");
                         dl.setVisible(true);
                         tf.setText("");
                    }
               }
          });
     }

     public static void main(String[] args)
     {
          new MyWindowDemo();
     }
}

文件的打开和保存

//会用到的知识点包括
//Frame, MenuBar, Menu, MenuItem, FileDialog, TextArea
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuDemo
{
     private Frame f;
     private MenuBar mb;
     private Menu m;
     private Menu subm;
     private MenuItem mi;
     private MenuItem submi;
     private MenuItem openmi,savemi;
     private FileDialog fd;
     private File file;
     private TextArea ta;
     MyMenuDemo()
     {
          init();
     }
     public void init()
     {
          f = new Frame("my window");
          f.setBounds(300,100,650,600);

          ta = new TextArea();

          mb = new MenuBar();
          ta = new TextArea();
          m = new Menu("文件");
          subm = new Menu("子菜单");

          mb.add(m);
          openmi = new MenuItem("打开");
          savemi = new MenuItem("保存");
          mi = new MenuItem("退出");
          submi = new MenuItem("子项");
          subm.add(submi);
          m.add(subm);
          m.add(openmi);
          m.add(savemi);
          m.add(mi);

          f.setMenuBar(mb);
          f.add(ta);
          f.setVisible(true);
          myEvent();

     }
     public void myEvent()
     {
          f.addWindowListener(new WindowAdapter()
          {
               public void windowClosing(WindowEvent e)
               {
                    System.exit(0);
               }
          });
          //打开事件
          openmi.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    fd = new FileDialog(f,"open",FileDialog.LOAD);
                    fd.setVisible(true);
                    try
                    {    
                         ta.setText("");
                         //如果点了Filedialog的取消,就直接结束.
                         if(fd.getDirectory()==null || fd.getFile()==null)
                              return ;
                         file = new File(fd.getDirectory(),fd.getFile());
                         System.out.println(file);
                         BufferedReader br =
                              new BufferedReader(new FileReader(file));
                         String line = null;
                         while ((line=br.readLine())!=null)
                         {
                              ta.append(line+"\r\n");
                         }
                         br.close();
                    }
                    catch (IOException ex)
                    {
                         throw new RuntimeException("该文件类型不匹配");
                    }
                   
               }
          });
          //保存事件
          savemi.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    //判断文件是否已经存在,不存在就弹出Filedialog
                    if (file==null)
                    {
                         fd = new FileDialog(f,"save",FileDialog.SAVE);
                         fd.setVisible(true);
                         //如果点了Filedialog的取消,就直接结束
                         if(fd.getDirectory()==null || fd.getFile()==null)
                              return ;
                         file = new File(fd.getDirectory(),fd.getFile());
                    }
                    try
                    {
                         BufferedWriter bw =
                              new BufferedWriter(new FileWriter(file));
                         bw.write(ta.getText());
                         bw.close();
                    }
                    catch (IOException ex)
                    {
                         throw new RuntimeException("创建文件失败");
                    }
               }
          });
          mi.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent e)
               {
                    System.exit(0);
               }
          });
     }
     public static void main(String[] args)
     {
          new MyMenuDemo();
     }
}

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包即可启动。

抱歉!评论已关闭.