什么是GUI编程

全称Graphic User Interface,指图形用户界面

java的GUI编程包

  1. AWT(Abstract Window Toolkit)(淘汰)
    依赖操作系统的本地窗口
  2. Swing
    基于AWT,轻量级组件,不依赖本地窗口系统

常用的Swing组件

  • JFrame:窗口
  • JPanel:组织其他组件的容器
  • JButton:按钮
  • JTextField:输入框
  • JTable:表格
public class demo1 {
    public static void main(String[] args) {
        // GUI
        //创建一个窗口,有一个登录按钮
        JFrame jf = new JFrame("登陆窗口");

        JPanel panel = new JPanel();//创建面板
        jf.add(panel);//添加面板

        jf.setSize(400, 300);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口退出程序
        jf.setLocationRelativeTo(null);//居中

        JButton jb = new JButton("登录");//创建按钮
        //jb.setBounds(100, 100, 100, 50);//设置按钮的位置和宽高
        panel.add(jb);//添加按钮

        jf.setVisible(true);//显示窗口
    }
}

常见的布局管理器(layout manager)

  • FlowLayout
  • BorderLayout
  • GridLayout
  • BoxLayout

事件处理

GUI编程中,事件的处理是通过**事件监听器(Event Listener)**完成的

public class test {
    public static void main(String[] args) {
        //GUI事件处理机制
        JFrame jf = new JFrame("登陆窗口");

        JPanel panel = new JPanel();//创建面板
        jf.add(panel);//添加面板

        jf.setSize(400, 300);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口退出程序
        jf.setLocationRelativeTo(null);//居中

        JButton jb = new JButton("登录");//创建按钮
        //jb.setBounds(100, 100, 100, 50);//设置按钮的位置和宽高
        panel.add(jb);//添加按钮

        //给按钮绑定点击事件监听器对象
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                //一旦点击jb按钮,底层就会触发这个方法
                //e 是一个事件对象,封装了事件信息
                JOptionPane.showMessageDialog(jf, "点击了登录按钮");

            }
        });

        //监听用户键盘上下左右四个按键的事件
        //给jf窗口整体绑定按键事件
        jf.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(java.awt.event.KeyEvent e) {
                int keyCode = e.getKeyCode();//拿事件源头的键帽编号
                //一旦用户按下任意按键,底层就会触发这个方法
                //e 封装了按键信息
                switch (keyCode) {
                    case KeyEvent.VK_LEFT:
                        JOptionPane.showMessageDialog(jf, "点击了左键");
                        break;
                    case KeyEvent.VK_UP:
                        JOptionPane.showMessageDialog(jf, "点击了上键");
                        break;
                    case KeyEvent.VK_RIGHT:
                        JOptionPane.showMessageDialog(jf, "点击了右键");
                        break;
                    case KeyEvent.VK_DOWN:
                        JOptionPane.showMessageDialog(jf, "点击了下键");
                        break;
                }
            }
        });

        jf.setVisible(true);//显示窗口

        //让窗口成为焦点
        jf.requestFocus();
    }
}

事件的几种常见写法

  1. 直接提供实现类,用于创建事件监听对象
public class test2 {
    public static void main(String[] args) {
        //第一种:提供实现类,创建实现类对象代表事件监听器对象
        JFrame jf = new JFrame("登陆窗口");

        JPanel panel = new JPanel();//创建面板
        jf.add(panel);//添加面板

        jf.setSize(400, 300);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口退出程序
        jf.setLocationRelativeTo(null);//居中

        JButton jb = new JButton("登录");//创建按钮
        //jb.setBounds(100, 100, 100, 50);//设置按钮的位置和宽高
        panel.add(jb);//添加按钮

        jb.addActionListener(new MyActionListener());

        jb.setVisible(true);
    }
}



class MyActionListener implements ActionListener {
    private JFrame jf;
    public MyActionListener() {
        jf = new JFrame("登陆窗口");
    }
    public MyActionListener(JFrame jf) {
        this.jf = jf;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(jf, "点击了登录按钮");
    }
}
  1. 直接使用匿名内部类的对象,代表事件监听对象
    见上文事件处理部分
  2. 自定义窗口,让窗口对象实现事件接口
//自定义的登陆界面,认JFrame做父类
public class LoginFrame extends JFrame implements ActionListener{
    public LoginFrame() {
        setTitle("登录界面");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        //setVisible(true);

        init();//初始化窗口组件
    }
    private void init() {
        //加一个登录按钮
        JButton jb = new JButton("登录");

        jb.addActionListener(this);//添加监听器

        JPanel panel = new JPanel();
        this.add(panel);

        panel.add(jb);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(this, "点击了登录按钮");
    }
}
public class test3 {
    public static void main(String[] args) {
        //自定义一个登录界面,让界面对象本身也是事件监听器对象
        LoginFrame lf = new LoginFrame();//登录界面
        lf.setVisible(true);//显示界面
    }
}

更多推荐