图形界面

   Java创建图形化界面

   步骤:

  1. 创建frame窗体。
  2. 对窗体进行基本设置,比如大小、位置、布局。
  3. 定义组件。
  4. 将组件通过窗体的add()方法添加到窗体中。
  5. 让窗体显示,通过setVisible(true)来完成。 

   事件监听机制

   事件监听机制的特点:

  1. 事件源。
  2. 事件。
  3. 监听器。
  4. 事件处理。 

   事件源:就是awt包或者swing包中那些图形界面组件。

   事件:每一个事件源都有自己特有的对应事件和共性事件(鼠标、键盘事件)。

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

   以上三者,在java中都已经定义好了,直接获取其对象来用就可以了。我们要做的事情是,就是对产生的动作进行处理。

   图示事件监听机制的流程图:

   窗体事件

   示例代码:

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
class MyWin implements WindowListener {
    //覆盖7个方法,可是我只用到了关闭的动作。
    //其他动作都没有用到,可是却必须复写。
}
*/
//因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。
//并覆盖了其中的所有方法。那么我只要继承自WindowAdapter覆盖我需要的方法即可。
class MyWin extends WindowAdapter {
    public void windowClosing(WindowEvent e) {
        //System.out.println("window closing---"+e.toString());
        System.exit(0);
    }
}


public class AwtDemo0 {

    public static void main(String[] args) {
        Frame f = new Frame("my awt");
        
        Button b = new Button("我是一个按钮");
        
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("我关");
                System.exit(0);
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("我活了");
            }

            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("我被打开了,哈哈哈");
            }
            
            
        });
        
        f.setLayout(new FlowLayout());
        f.add(b);
        f.setSize(500, 400);
        f.setLocation(300, 200);
        f.setVisible(true);
        //System.out.println("hello world!");
    }

}

   Action事件

   示例代码:

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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);
    }
    
    public void myEvent() {
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
            
        });
        
        /*
         * 让按钮具备退出程序的功能
         * 按钮就是事件源。那么选择哪一个监听器呢?
         * 通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。需要查看该组件对象的功能。
         * 通过查阅button的描述,发现按钮支持一个特有监听ActionListener。
         */
        but.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("退出,按钮干的");
                System.exit(0);
            }
        });
    }
}

public class AwtDemo1 {

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

}

   鼠标事件/键盘事件

   示例代码:

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class MouseAndKey {
    // 定义该图形中所需的组件引用。
    private Frame f;
    private Button but;
    private TextField tf;

    MouseAndKey() {
        init();
    }

    public void init() {
        f = new Frame("my frame");

        // 对frame进行基本设置
        f.setBounds(300, 100, 600, 500);
        f.setLayout(new FlowLayout());
        
        tf = new TextField(20);//文本框
        but = new Button("my button");
        // 将组件添加到frame中
        f.add(tf);
        f.add(but);
        
        
        // 加载一下窗体上事件
        myEvent();

        // 显示窗体
        f.setVisible(true);
    }

    public void myEvent() {
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }

        });
        
        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                int code = e.getKeyCode();
                if(!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)) {
                    System.out.println(code+"...........是非法的");
                    e.consume();//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。(即不会把非数字字符写入)
                }
            }
            
        });
        
        //给键盘添加一个监听器
        but.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                /*
                if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                    System.exit(0);
                }
                */
                if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {//组合键
                    //System.exit(0);
                    System.out.println("ctrl+enter is run");
                }
                //System.out.println(e.getKeyChar()+"..."+e.getKeyCode());
                //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());
            }
        });
        /*
        but.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("action ok");
            }
        });
        
        but.addMouseListener(new MouseAdapter() {
            private int count = 1;
            private int clickCount = 1;
            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("鼠标进入到该组件"+count++);
            }
            @Override
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount() == 2)
                    System.out.println("双击动作"+clickCount++);
            }
            
        });
        */
    }
}

public class MouseAndKeyEvent {

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

}

 

   

   代码:

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public 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);
        
        /*
         * 对话框,也是一个窗体,最好不要加到Frame里面去
         */
        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() {
        //点击对话框中的确定按钮,对话框也不显示出来
        okBut.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                d.setVisible(false);
            }
        });
        /*
         * 关闭对话框,对话框不显示
         */
        d.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                d.setVisible(false);
            }
        });
        
        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                    showDir();
                }
            }
            
        });
        
        /*
         * 按钮是事件源
         */
        but.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                showDir();
            }
        });
        
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
            
            
        });
    }
    
    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");//将给定文本追加到文本区的当前文本。
            }
        } else {
            //ta.setText("你错了");
            String info = "您输入的信息:"+dirPath+"是错误的!请重输";
            lab.setText(info);//设置提示信息
            d.setVisible(true);
        }
        //tf.setText("");
    }
    
    public static void main(String[] args) {
        new MyWindowDemo();
    }

}

   模仿Windows的记事本(notepad.exe)程序完成文件的打开、保存、退出的操作。

   

   代码:

import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class MyMenuDemo {
    private Frame f;
    private MenuBar bar;
    private TextArea ta;
    private Menu fileMenu, subMenu;
    private MenuItem openItem, saveItem, closeItem, subItem;
    
    private FileDialog openDia, saveDia;
    private File file;
    
    MyMenuDemo() {
        init();
    }
    
    public void init() {
        f = new Frame("my window");
        f.setBounds(300, 100, 650, 600);
        //f.setLayout(new FlowLayout());默认边界布局
        
        bar = new MenuBar();
        
        ta = new TextArea();
        
        fileMenu = new Menu("文件");
        
        subMenu = new Menu("子菜单");
        
        openItem = new MenuItem("打开");
        saveItem = new MenuItem("保存");
        subItem = new MenuItem("子条目");
        closeItem = new MenuItem("退出");
        subMenu.add(subItem);
        
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(subMenu);
        fileMenu.add(closeItem);
        bar.add(fileMenu);
        
        
        f.setMenuBar(bar);
        
        openDia = new FileDialog(f, "我要打开", FileDialog.LOAD);
        saveDia = new FileDialog(f, "我要保存", FileDialog.SAVE);
        
        f.add(ta);
        myEvent();
        
        f.setVisible(true);
    }
    
    public void myEvent() {
        
        saveItem.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                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.flush();
                    bufw.close();
                } catch (IOException e) {
                    throw new RuntimeException();
                }
                
            }
            
        });
        
        openItem.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                openDia.setVisible(true);
                String dirPath = openDia.getDirectory();
                String fileName = openDia.getFile();
                //System.out.println(dirPath+"...."+fileName);
                if(dirPath == null || fileName == null) {
                    return;
                }
                ta.setText("");//清空
                file = new File(dirPath, fileName);
                try {
                    BufferedReader bufr = new BufferedReader(
                            new FileReader(file));
                    String line = null;
                    while((line = bufr.readLine()) != null) {
                        ta.append(line+"\r\n");
                    }
                    bufr.close();
                } catch (IOException e1) {
                    throw new RuntimeException("读取失败");
                }
                
            }
        });
        
        closeItem.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
            
            
        });
    }
    
    public static void main(String[] args) {
        new MyMenuDemo();
    }

}

 

   双击XXX.jar包运行

   两张图即可说明:

 

posted @ 2016-03-16 13:03  叶十一少  阅读(292)  评论(0编辑  收藏  举报