黑马程序员__Java GUI编程

day22视频

1. Graphical User Interface

java为GUI提供的对象都存在 java.AWT 和 javax.Swing 两个包中
java.AWT : Abstract Window Toolkit  抽象窗口工具包 
     需要调用本地系统方法实现功能,移植性差,依赖系统。  重量级控件
 
javax.Swing
     在AWT基础上,建立的一套图形界面系统,提供了更多的组件,完全由java实现。移植性好,轻量级控件
Eclipse 是基于SWT开发的
黑马程序员__Java GUI编程
 
图形用户界面库包含3个要素: 组件 布局 事件
 
黑马程序员__Java GUI编程
 
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,完成。