美文网首页
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

    概述 GUI(Graphical User Interface):图形用户接口。用图形的方式,来显示计算机操作的界...

网友评论

      本文标题:Day22--GUI

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