zoukankan      html  css  js  c++  java
  • 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 上面自带一层容器

  • 相关阅读:
    FastAPI(38)- 模拟一个跨域场景
    FastAPI(37)- Middleware 中间件
    Python
    Python
    FastAPI(35)- 依赖项中使用 yield + Context Manager 上下文管理器
    汇编 | CPU物理地址本质理解
    汇编 | DosBox初步接触的一些初始化设置(窗口大小 & 默认命令)
    汇编语言 第3版 王爽 检测点答案及详细解析 (更新中)
    JSP | Tomcat目录结构详解
    JSP常见错误以及解决方案
  • 原文地址:https://www.cnblogs.com/gbhh/p/13696993.html
Copyright © 2011-2022 走看看