美文网首页
Day22--GUI

Day22--GUI

作者: pure_joy | 来源:发表于2019-07-25 16:37 被阅读0次
    概述

    GUI(Graphical User Interface):图形用户接口。用图形的方式,来显示计算机操作的界面,这样更方便更直观。

    • AWT与Swing
      java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。
      javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了很多的组件,而且完成由Java实现。增强了移植性,属轻量级控件。


      继承关系图
    布局管理器
    • 容器中的组件的排放方式,就是布局。
    • 常见的布局管理器:
      1、FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。
      2、BorderLayout(边界布局管理器):东、南、西、北、中。Frame默认的布局管理器。
      3、GridLayout(网格布局管理器):规则的矩阵。
      4、CardLayout(卡片布局管理器):选项卡。
      5、GridBagLayout(网格包布局管理器):非规则的矩阵。
    import java.awt.*;
    
    /*
    创建图形化界面:
    1、创建frame窗体。
    2、对窗体进行基本设置。
        比如大小、位置、布局。
    3、定义组件。
    4、将组件通过窗体的add方法添加到窗体中。
    5、让窗体显示,通过setVisible(true);
    */
    
    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.setVisible(true);
        }
    }
    
    事件监听机制
    • 事件监听机制组成:事件源(组件)、事件(Event)、监听器(Listener)、事件处理(引发事件后处理方式)。


      事件监听机制流程图

      事件源:就是awt包或者swing包中的那些图形界面组件。
      事件:每一个事件源都有自己特有的对应事件和共性事件。
      监听器:将可以触发某一事件的动作(不只一个动作)都已经封装到了监听器中。
      以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。我们要做的事情是,就是对产生的动作进行处理。

    • Action事件
    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);
                }
            }
        });
    
            //让按钮具备退出程序的功能
            /*
            按钮就是事件源。
            那么选择哪个监听器呢?
            通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
            需要查看该组件对象的功能。
                通过查阅button的描述,发现按钮支持一个特有监听addActionListener。
            */
            but.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    System.out.println("退出,按钮干的");
                    System.exit(0);
                }
            }); 
        }
    
        public static void main(String[] args) 
        {
            new FrameDemo();
        }
    }
    
    • 鼠标和键盘事件
    import java.awt.*;
    import java.awt.event.*;
    class MouseAndKeyEvent
    {
        private Frame f;
        private Button but;
        private TextField tf;
    
        MouseAndKeyEvent()
        {
            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))
                    {
                        System.out.println(code+"....是非法的。");
                        e.consume();
                    }
                }
            })
    
            //给But添加一个键盘监听
            but.addKeyListener(new KeyAdapter()
            {
                public void keyPressed(KeyEvent e)
                {
                    if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
                        System.exit(0);
                    //System.out.println(e.getKeyChar()+"......"+e.getKeyCode());
                }
            });
    
            but.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    System.out.println("action ok");
                }
            });
    
            but.addMouserListener(new MouseEvent()
            {
                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 MouseAndKeyEvent();
        }
    }
    
    • 列出文件目录
    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);
    
            d = new Dialog(f,"提示信息-self",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);
        }
    
        public void myEvent()
        {
            okBut.addActionListener(NEW ActionListener()
            {
                d.setVisible(false);
            });
            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();
                }
            });
    
            but.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    showDir();
                }
            });
            f.addWindowListener(new WindowAdapter()
            {
                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
            {
                String info - "您输入的信息:"+dirPath+"是错误的。请重新输入";
                lab.setText(info);
                d.setVisible(true);
            }
        }
    
        public static void main(String[] args)
        {
            new MyWindowDemo();
        }
    }
    
    菜单
    import java.awt.*;
    import java.awt.event.*;
    
    class MyMeuDemo
    {
        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;
    
        MyMeuDemo()
        {
            init();
        }
    
        public void init()
        {
            f = new Frame("my window");
            f.setBounds(300,100,650,600);
    
            bar = new MenuBar();
    
            ta = new TextArea();
    
            fileMenu = new Menu("文件");
    
            subMenu = new Menu("子菜单");
    
            subItem = new MenuItem("子条目");
            openItem = new MenuItem("打开");
            saveItem = new MenuItem("保存");
            closeItem = new MenuItem("退出");
    
            subMenu.add(subItem);
    
            fileMenu.add(subMenu);
            fileMenu.add(openItem);
            fileMenu.add(saveItem);
            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);
        }
    
        private void myEvent()
        {
            saveItem.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    if(file==null)
                    {
                        saveDia.setVisible(true);
    
                        String dirPath = saveDia.getDirectory();
                        String fielName = saveDia.getFile();
                        if(dirPath==null || fielName==null)
                            return ;
                        file = new File(dirPath,fielName);
                    }
    
                    try
                    {
                        BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
    
                        String text = ta.getText();
    
                        bufw.write(text);
                        bufw.close();
                    }
                    catch(IOException e)
                    {
                        throw RuntimeException("保存失败");
                    }
                }
            })
            openItem.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    openDia.setVisible(true);
                    String dirPath = openDia.getDirectory();
                    String fielName = openDia.getFile();
                    if(dirPath==null || fielName==null)
                        return ;
                    file = new File(dirPath,fielName);
    
                    try
                    {
                        BufferedRead bufr = new BufferedRead(new FileRead(file));
    
                        String line = null;
    
                        while((line=bufr.readLine())!=null)
                        {
                            ta.append(line+"\r\n");
                        }
    
                        bufr.close();
                    }
                    catch(IOException ex)
                    {
                        throw new RuntimeException("读取失败");
                    }
                }
            });
    
            closeItem.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    System.exit(0);
                }
            });
    
            f.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }
            });
        }
    
        public static void main(String[] args) 
        {
            new MyMeuDemo();
        }
    }
    
    打包成jar包
    1.txt

    记得:Main-Class后面必须加空格,结尾必须回车,不然会报错。


    DOS命令行
    如果1.txt中没加空格

    相关文章

      网友评论

          本文标题:Day22--GUI

          本文链接:https://www.haomeiwen.com/subject/zuaxrctx.html