GUI编程

GUI编程

图形用户界面(Graphical User Interface)

组件

  • 窗口
  • 弹窗
  • 面板
  • 文本框
  • 列表框
  • 按钮
  • 图片
  • 监听事件
  • 鼠标
  • 键盘事件
  • 破解工具

GUI核心技术

Swing Awt

缺点:界面不美观,需要jre环境

优点:写小工具、了解MVC架构

Awt

Frame 窗口

public static void main(String[] args) {
        Frame frame = new Frame("hello!");
        frame.setVisible(true);
        frame.setSize(400,400);
        frame.setBackground(Color.cyan);
        frame.setLocation(400,300);
        frame.setResizable(false);
    }

Panel 画板

public static void main(String[] args) {
        Frame frame = new Frame();
//        frame.setSize(400,400);
//        frame.setLocation(400,300);
        frame.setBounds(400,300,400,400);
        frame.setBackground(new Color(0xA0A0D8));
        frame.setLayout(null);

        Panel panel = new Panel();
        panel.setBackground(new Color(0x85D0B7));
        panel.setBounds(50,50,300,300);

        frame.add(panel);
        frame.setVisible(true);
        /*
            监听事件
            适配器
         */
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
//                结束程序
                System.exit(0);
            }
        });
    }

布局管理器

流式布局

 public static void main(String[] args) {
        Frame frame = new Frame("FlowLayout");
        frame.setBounds(400,300,400,600);
        frame.setBackground(new Color(0x8483E6E6));

        Button btn1 = new Button("btn1");
        Button btn2 = new Button("btn2");
        Button btn3 = new Button("btn3");
        // 参数:位置 水平间距 垂直间距
//        frame.setLayout(new FlowLayout(0,10,20));
        frame.setLayout(new FlowLayout(FlowLayout.LEFT));
        frame.add(btn1);
        frame.add(btn2);
        frame.add(btn3);

        frame.setVisible(true);
    }

东西南北

public static void main(String[] args) {
    Frame frame = new Frame("BorderLayout");
    frame.setBounds(400,400,800,600);

    Button east = new Button("east");
    Button west = new Button("west");
    Button north = new Button("north");
    Button south = new Button("south");
    Button center = new Button("center");

    frame.add(east,BorderLayout.EAST);
    frame.add(west,BorderLayout.WEST);
    frame.add(north,BorderLayout.NORTH);
    frame.add(south,BorderLayout.SOUTH);
    frame.add(center,BorderLayout.CENTER);

    frame.setVisible(true);
}

表格布局

public static void main(String[] args) {
    Frame frame = new Frame("GridLayout");
    frame.setBounds(400,400,800,600);
    Button btn1 = new Button("btn1");
    Button btn2 = new Button("btn2");
    Button btn3 = new Button("btn3");
    Button btn4 = new Button("btn4");
    Button btn5 = new Button("btn5");


    frame.setLayout(new GridLayout(3,2));
    frame.add(btn1);
    frame.add(btn2);
    frame.add(btn3);
    frame.add(btn4);
    frame.add(btn5);

    frame.pack(); //Java函数,自动选择最优的布局摆放
    frame.setVisible(true);
}

花式布局-练手

public static void main(String[] args) {
        Frame frame = new Frame("花式布局-练手");
        frame.setBounds(400,400,800,600);

        Panel panel1 = new Panel(new BorderLayout());
        Panel panel2 = new Panel(new BorderLayout());
        Panel panel3 = new Panel(new GridLayout(2,1));
        Panel panel4 = new Panel(new GridLayout(2,2));

        Button btn1 = new Button("btn1");
        Button btn2 = new Button("btn2");
        Button btn3 = new Button("btn3");
        Button btn4 = new Button("btn4");
        Button btn5 = new Button("btn5");
        Button btn6 = new Button("btn6");
        Button btn7 = new Button("btn7");
        Button btn8 = new Button("btn8");
        Button btn9 = new Button("btn9");
        Button btn10 = new Button("btn10");

        frame.setLayout(new GridLayout(2,1));

        panel1.setBackground(new Color(0x7070DE));
        panel2.setBackground(new Color(0x70DEB9));
        panel3.setBackground(new Color(0xE2E277));
        panel4.setBackground(new Color(0xE29977));
//        panel1.setBounds(0,0,800,300);
//        panel2.setBounds(0,300,800,300);
//        panel3.setBounds(150,0,500,300);

        frame.add(panel1);
        frame.add(panel2);
        //p1
        panel1.add(btn1,BorderLayout.WEST);
        panel1.add(panel3,BorderLayout.CENTER);
        panel1.add(btn2,BorderLayout.EAST);

        //p2
        panel2.add(btn3,BorderLayout.WEST);
        panel2.add(panel4,BorderLayout.CENTER);
        panel2.add(btn4,BorderLayout.EAST);

        //p3
        panel3.add(btn5);
        panel3.add(btn6);

        //p4
        panel4.add(btn7);
        panel4.add(btn8);
        panel4.add(btn9);
        panel4.add(btn10);

        frame.setVisible(true);
    }

事件监听

当某事发生时,干什么?

public class Demo01 {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setBounds(400,400,800,600);

        Button btn1 = new Button("btn1");
        MyActionListener myActionListener = new MyActionListener();
        btn1.addActionListener(myActionListener);

        frame.add(btn1);
        frame.setVisible(true);
    }
}

class MyActionListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("ActionEvent");
    }
}

画笔

public class Demo01 {
    public static void main(String[] args) {
        new MyPaint().loadFrame();
    }
}

class MyPaint extends Frame{

    public void loadFrame(){
        setBounds(400,400,800,600);
        setVisible(true);
    }
    //画笔
    @Override
    public void paint(Graphics g) {
//        super.paint(g);
        g.setColor(new Color(0xE329B6));
        g.drawLine(50,50,100,100);
        g.setColor(new Color(0x29B8E3));
        g.drawOval(100,100,50,50);
        g.setColor(new Color(0x2948E3));
        g.fill3DRect(200,200,100,150,false);
    }

}

鼠标监听

MouseListener
MouseAdapter

窗口监听

WindowAdapter

键盘监听

class MyKeyListener extends KeyAdapter{
    @Override
    public void keyTyped(KeyEvent e) {
//        super.keyTyped(e);
        System.out.println("   当前输入的字符是 :  " +e.getKeyChar());
//        int keyCode = e.getKeyCode();
//        System.out.println("   当前输入的keycode是 :  " + e.getKeyCode());
//        if(keyCode == KeyEvent.VK_J){
//            System.out.println("按下了 J 键");
//        }
    }
}

Swing

窗口、面板

public void init(){
    //JFrame
    JFrame jf = new JFrame("Jframe");
    jf.setBounds(400,400,400,400);
    jf.setVisible(true);
    jf.setBackground(Color.cyan);
    //JLabel
    JLabel jLabel = new JLabel("欢迎来到钢镚核恒!");
    jLabel.setHorizontalAlignment(SwingConstants.CENTER);
    jf.add(jLabel);
    //关闭窗口
    jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

弹窗

public class Demo02 {
    public Demo02() {
        JFrame jf = new JFrame("JFrame");
        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setBounds(400,400,400,400);
        jf.setBackground(Color.cyan);
        Container contentPane = jf.getContentPane();
        //绝对布局
        contentPane.setLayout(null);
        
        JButton jb = new JButton("弹窗");
        jb.setBackground(Color.pink);
        jb.setBounds(10,10,150,100);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new MyDialog();
            }
        });
        jf.add(jb);
    }
    public static void main(String[] args) {
        new Demo02();
    }
}
class MyDialog extends JDialog{
    public MyDialog() {
        this.setVisible(true);
        this.setBounds(100,100,200,300);
        Container cp = this.getContentPane();
        JLabel jl = new JLabel("欢迎来到钢镚核恒!");
        cp.add(jl);
    }
}

图片

public class Demo03 extends JFrame {
    public Demo03() {
        this.setBackground(Color.pink);
        this.setBounds(400,400,400,600);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JLabel jl = new JLabel("ImageIcon");
        //获取icon 的 url
        URL url = Demo03.class.getResource("gb.jpg");
        System.out.println("url : "+url);
        ImageIcon imageIcon = new ImageIcon(url);
        jl.setIcon(imageIcon);
        jl.setHorizontalAlignment(SwingConstants.CENTER);
        //获取容器
        Container cp = this.getContentPane();
        cp.add(jl);

        this.setVisible(true);

    }

    public static void main(String[] args) {
        new Demo03();
    }
}

画板

public Demo04() {
    Container cp = this.getContentPane();
    cp.setLayout(new GridLayout(2,2));

    JPanel jp1 = new JPanel(new GridLayout(2,1));
    JPanel jp2 = new JPanel(new GridLayout(1,2));
    JPanel jp3 = new JPanel(new GridLayout(2,2));
    JPanel jp4 = new JPanel(new GridLayout(3,2));

    JButton jb1 = new JButton("1");
    JButton jb2 = new JButton("1");
    JButton jb3 = new JButton("2");
    JButton jb4 = new JButton("2");
    JButton jb5 = new JButton("3");
    JButton jb6 = new JButton("3");
    JButton jb7 = new JButton("3");
    JButton jb8 = new JButton("3");
    JButton jb9 = new JButton("4");
    JButton jb10 = new JButton("4");
    JButton jb11 = new JButton("4");
    JButton jb12 = new JButton("4");
    JButton jb13 = new JButton("4");


    jp1.add(jb1);
    jp1.add(jb2);
    jp2.add(jb3);
    jp2.add(jb4);
    jp3.add(jb5);
    jp3.add(jb6);
    jp3.add(jb7);
    jp3.add(jb8);
    jp4.add(jb9);
    jp4.add(jb10);
    jp4.add(jb11);
    jp4.add(jb12);
    jp4.add(jb13);

    cp.add(jp1);
    cp.add(jp2);
    cp.add(jp3);
    cp.add(jp4);

    this.setVisible(true);
    this.setBounds(400,400,400,400);
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

下拉框

public Demo05() {
        Container cp = this.getContentPane();
        //文本框
        JTextArea jTextArea = new JTextArea("欢迎来到钢镚核恒!",30,40);
//        scroll面板
        JScrollPane jScrollPane = new JScrollPane(jTextArea);
        cp.add(jScrollPane);
        this.setVisible(true);
        this.setBounds(400,400,400,400);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

单选框、多选框

 public Demo06() {
        Container cp = this.getContentPane();
        cp.setLayout(new GridLayout(2,4));
        //单选框
        JRadioButton jrb1 = new JRadioButton("JRadioButton1");
        JRadioButton jrb2 = new JRadioButton("JRadioButton2");
        JRadioButton jrb3 = new JRadioButton("JRadioButton3");
        JRadioButton jrb4 = new JRadioButton("JRadioButton4");
//        多选框
        JCheckBox jcb1 = new JCheckBox("JCheckBox1");
        JCheckBox jcb2 = new JCheckBox("JCheckBox2");
        JCheckBox jcb3 = new JCheckBox("JCheckBox3");
        JCheckBox jcb4 = new JCheckBox("JCheckBox4");
        //分组-单选
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(jrb1);
        buttonGroup.add(jrb2);
        buttonGroup.add(jrb3);
        buttonGroup.add(jrb4);

        cp.add(jrb1);
        cp.add(jrb2);
        cp.add(jrb3);
        cp.add(jrb4);
        cp.add(jcb1);
        cp.add(jcb2);
        cp.add(jcb3);
        cp.add(jcb4);
        this.setVisible(true);
        this.setBounds(400,400,400,400);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

列表

public Demo07() throws HeadlessException {
    Container cp = this.getContentPane();
    cp.setLayout(new GridLayout(2,1));
    //下拉框
    JComboBox jComboBox = new JComboBox();
    jComboBox.addItem("正在热映");
    jComboBox.addItem("已下架");
    jComboBox.addItem("即将上映");
    cp.add(jComboBox);
    //列表框
    String[] list = {"1","2","3","4"};
    JList jList = new JList(list);
    cp.add(jList);
    this.setVisible(true);
    this.setBounds(400,400,400,400);
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

总结

思路

顶级窗口:Frame、JFrame

容器:Container:getContentPane()

布局:FlowLayout、GridLayout、BorderLayout

组件:按钮、文本框等

窗口的显示与退出

关系

容器在窗口上

组件在容器上

布局是窗口或容器的一种排列属性

注:JFrame 上面自带一层容器

原文地址:https://www.cnblogs.com/gbhh/p/13696993.html