• 黑马程序员__Java GUI编程


    day22视频

    1. Graphical User Interface

    java为GUI提供的对象都存在 java.AWT 和 javax.Swing 两个包中
    java.AWT : Abstract Window Toolkit  抽象窗口工具包 
         需要调用本地系统方法实现功能,移植性差,依赖系统。  重量级控件
     
    javax.Swing
         在AWT基础上,建立的一套图形界面系统,提供了更多的组件,完全由java实现。移植性好,轻量级控件
    Eclipse 是基于SWT开发的
     
    图形用户界面库包含3个要素: 组件 布局 事件
     
     
    Component:组件
    Container:容器
    Panel:面板
    Frame:框架
    Dialog:对话框
    Checkbox:复选框
     
    2.布局管理器
    容器的组件的排放方式,就是布局。
    常见布局管理器:
         FlowLayout 流式布局: 从左到右的顺序排列,Panel默认的布局管理器
         BorderLayout 边界布局管理器:东西南北中, Frame默认的布局管理器
         GridLayout 网格布局管理器: 规则的网格
         CardLayout 卡片布局管理器: 选项卡
         GridBagLayout 网格包布局管理器:非规则的网格
     
    3.创建图形化界面的基本步骤:
    1.创建窗体
    2.对窗体进行基本设置: 比如大小、位置、布局
    3.定义组件
    4.将组件添加到窗体中
    5.设置窗体可视化
     
     
    4.事件监听机制的特点:
    1.事件源: awt包或swing包中的图形界面组件
    2.事件: 每个事件源都有自己的特有对应事件和共性事件
    3.监听器:将可以触发某一个事件的动作都已经封装到监听器中 
    ---以上3者在java中都定义好了
    4.事件处理:
    public class AwtDemo {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Frame f = new Frame("my awt");
            f.setSize(500,400);
            f.setLocation(300, 400);
            f.setLayout(new FlowLayout());
            
            Button b = new Button("我是一个按钮");
            
            f.add(b);
            // WindowListener是一个用于接收窗口事件的监听器器接口
            //WindowAdapter是其子类,但是它的所有方法是空实现的,所有需要自己定义
            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.setVisible(true);
        }
    }

    5.给按钮添加监听器:

            //让按钮具备退出程序的功能
            //由于按钮的监听器接口ActionListener只有一个方法,所有它没有适配器
            b.addActionListener(new ActionListener() {            
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    System.out.println("按钮关闭了程序");
                    System.exit(0);
                }
            });

    6.鼠标和键盘事件:

    由于鼠标和键盘是通用的,所有Component方法中有添加其监听器的方法。

     
            //接口 MouseListener有适配器类 MouseAdapter
            b.addMouseListener(new MouseListener() {
                
                @Override
                public void mouseReleased(MouseEvent e) {
                //    System.out.println("鼠标释放了");
                }
                
                @Override
                public void mousePressed(MouseEvent e) {
                //    System.out.println("鼠标按下了");
                }
                
                @Override
                public void mouseExited(MouseEvent e) {
                //    System.out.println("鼠标离开来了");
                }
                
                @Override
                public void mouseEntered(MouseEvent e) {
                //    System.out.println("鼠标进入了");
                }
                
                @Override
                public void mouseClicked(MouseEvent e) {
                    if(e.getClickCount()==2){
                        System.out.println("鼠标双击了");                    
                    }
                    if(e.getClickCount()==1)
                        System.out.println("鼠标单击");            
                }
            });
            

     键盘事件:

     
            b.addKeyListener(new KeyAdapter() {            
                @Override
                public void keyPressed(KeyEvent e) {
                    System.out.println(e.getKeyChar()+"---"+e.getKeyCode());
                    //使用字段来判断输入的键值
                    if(e.getKeyCode()==KeyEvent.VK_ENTER)
                        System.exit(0);
                    //判断组合键发出的命令==
                    if(e.isAltDown() &&e.getKeyCode()==KeyEvent.VK_ESCAPE)
                        System.exit(0);
                }
            });
                    
            tf.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    
                    System.out.println(e.getKeyCode());
                    int code = e.getKeyCode();
                    if(code<KeyEvent.VK_0 || code>KeyEvent.VK_9){
                        System.out.println(e.getKeyCode()+"非法");
                        e.consume(); //此方法可以禁止输入非法内容
                    }                                
                }
            });
            

    7.对话框 Dialog

            private Dialog d;
            private Label lab;
            private Button okBut;
    
                //Dialog(Dialog owner, String title, boolean modal) 
                //modal表示当对话框弹出时,是否允许用户输入到其他窗口; true为不允许
                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);
                    String info = "您输入的信息:"+dirPath+"是错误的。请重输";
                    lab.setText(info);
                    d.setVisible(true);

    Dialog默认是不可见的,当关闭时,只需要再次设置为不可见:

                okBut.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        d.setVisible(false);
                    }
                });

     8.菜单

    菜单相关的类有3个:  MenuBar  Menu  MenuItem

        private MenuBar mb;
        private Menu menu,subMenu;
        private MenuItem closeItem,subItem,openItem,saveItem;
            
            subMenu.add(subItem);
            
            //向菜单menu添加子菜单、菜单条目
            menu.add(subMenu);
            menu.add(saveItem);
            menu.add(openItem);
            menu.add(closeItem);
            
            //向菜单栏添加一个菜单
            mb.add(menu);

    子菜单可以指向n个菜单条目

     9. 文件对话框的调用:

        private FileDialog openDia,saveDia;
        private File file;
    
            //FileDialog.LOAD表示打开文件对话框,是已经定义好的,直接拿来用
            openDia = new FileDialog(f, "打开文件", FileDialog.LOAD);
            saveDia = new FileDialog(f, "保存文件", FileDialog.SAVE);

    10.命令行下可执行jar包的制作:  如何制作可以双击执行的jar包?

    • 1,将多个类封装到了一个包(package)中:    javac -d  目录路径  MyMenuTest.java  
    • 2,定义一个jar包的配置信息。
        定义一个文件a.txt 。文件内容内容为:
           Main-Class:(空格)包名.类名(回车)
    • 3,打jar包:
      jar -cvfm my.jar a.txt 包名
    • 4,通过winrar程序进行验证,查看该jar的配置文件中是否有自定义的配置信息。

    这里双击jar包就可以执行了,它是用javaw打开执行的,对于非GUI程序,无法双击执行

    win7+是没有这个选项的:

    通过工具--文件夹选项--文件类型--jar类型文件,通过高级,定义该jar类型文件的打开动作的关联程序。
    jdkinjavaw.exe -jar

    使用安装程序安装的JDK,不用手动修改文件夹选项。

     11.Eclipse环境下可执行jar包的制作:

    • 在eclipse中选择要导出的类或者package,右击,选择Export子选项; 
    • 在弹出的对话框中,选择java文件---选择JAR file,单击next
    • 在JAR file后面的文本框中选择你要生成的jar包的位置以及名字,注意在Export generated class files and resources和Export java source files and resources前面打上勾,单击next。
    • 到达JAR Manifest Specification。注意在最底下的Main class后面的文本框中选择你的jar包的入口类。单击Finish,完成。
     
     
  • 相关阅读:
    Hyperledger Fabric的容灾备份及恢复方法
    Sentinel使用
    Fabric1.4 架构和原理
    centos开放指定端口
    Python使用ProtoBuffer
    C++动态创建对象
    Shell笔记
    Go语言基础(二)
    Go语言基础(一)
    git常用命令
  • 原文地址:https://www.cnblogs.com/tyh2014/p/4298849.html
Copyright © 2020-2023  润新知