zoukankan      html  css  js  c++  java
  • 图形界面

       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+"
    ");//将给定文本追加到文本区的当前文本。
                }
            } 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+"
    ");
                        }
                        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包运行

       两张图即可说明:

  • 相关阅读:
    integer和double的比较.
    查看mysql版本的四种方法
    codefoces 1397D Stoned Game
    最小生成树集合合并
    codefoces 1400B RPG Protagonist
    codefoces 1400B RPG Protagonist
    牛客挑战赛42 小睿睿的伤害
    病毒扩散 排列组合
    Dus on tree 月出皎兮,佼人僚兮。
    msc的宠物 二分+树形DP
  • 原文地址:https://www.cnblogs.com/yerenyuan/p/5283042.html
Copyright © 2011-2022 走看看