• java基础16 GUI编程(Swing和AWT)


    一、组件

    GUI编程(图形 用户 界面编程)
    窗口
    弹窗
    面板
    文本框
    列表框
    按钮
    图片
    监听事件
    鼠标
    键盘事件

    二、简介

    Gui的核心技术:Swing AWT
    因为界面不美观
    需要jre环境

    可以写出自己心目中的小工具

    三、AWT(抽象的窗口工具)

    包含了很多类和接口
    元素:
    窗口,按钮,文本框
    组件存放在容器中
    在这里插入图片描述

    四、Frame

    package chap2;
    
    import java.awt.*;
    
    public class Demo1 {
        public static void main(String[] args) {
            Frame frame = new Frame("java界面窗口");
    
    //        需要设置可见性
            frame.setVisible(true);
    //      设置窗口大小
            frame.setSize(200,500);
    //        设置背景颜色
            frame.setBackground(new Color(25, 25, 203));
    //        弹出的初始位置
            frame.setLocation(600,600);
    //        设置大小固定
            frame.setResizable(false);
            
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    五、Panel

    package chap2;
    
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class Demo2 {
    //    Panel可以看做是一个空间,但是不能单独存在
        public static void main(String[] args) {
            Frame frame=new Frame("Myframe");
    //        布局的概念
            Panel panel=new Panel();
    //        设置布局
            frame.setLayout(null);
    //        坐标
            frame.setBounds(300,300,500,500);
            frame.setBackground(new Color(32, 194, 129));
    //      设置相对于frame的坐标
            panel.setBounds(50,50,400,400);
            panel.setBackground(new Color(173, 171, 25));
            frame.add(panel);
    
            frame.setVisible(true);
    
    //        监听事件
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    六、事件监听

    package chap2;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class Demo3 {
        public static void main(String[] args) {
            Frame frame=new Frame("开始-停止");
            Button button1=new Button("start");
            Button button2=new Button("stop");
            button2.setActionCommand("button2-stop");
            Mymonitor mymonitor=new Mymonitor();
    
            button1.addActionListener(mymonitor);
            button2.addActionListener(mymonitor);
    
            frame.add(button1,BorderLayout.NORTH);
            frame.add(button2,BorderLayout.SOUTH);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
            frame.pack();
            frame.setVisible(true);
    
    
        }
    }
    
    class Mymonitor implements ActionListener{
    
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("msg:"+e.getActionCommand());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    七、 文本框监听

    package chap2;
    
    import sun.awt.WindowClosingListener;
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class Demo4 {
        public static void main(String[] args) {
            new MyFrame();
        }
    
    
    }
    class MyFrame extends Frame{
        public MyFrame(){
            TextField textField = new TextField();
            add(textField);
    
            textField.addActionListener(new MyActionListener());
    //        设置编码
            textField.setEchoChar('*');
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            pack();
            setVisible(true);
        }
    }
    class MyActionListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            TextField textField= (TextField) e.getSource();
            String text = textField.getText();
            System.out.println(text);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    八、Paint

    package chap2;
    
    import java.awt.*;
    
    public class Demo5 {
        public static void main(String[] args) {
            new MyPaint().loadPaint();
        }
    }
    class MyPaint extends Frame{
        public void loadPaint(){
            setBounds(200,200,600,500);
            setVisible(true);
        }
    
        @Override
        public void paint(Graphics g) {
                g.setColor(Color.red);
                g.drawOval(100,100,100,100);
                g.fillOval(50,50,50,50);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    九、鼠标监听

    package chap2;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class Demo6 {
        public static void main(String[] args) {
            new MyFrame1("画图");
        }
    }
    class MyFrame1 extends Frame{
        ArrayList ponits;
    
        public MyFrame1(String title){
            super(title);
            setBounds(200,200,400,300);
    
            ponits=new ArrayList();
    
            this.addMouseListener(new MyMouseListener());
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            setVisible(true);
    
        }
    
        @Override
        public void paint(Graphics g) {
            Iterator iterator=ponits.iterator();
            while (iterator.hasNext()){
                Point point = (Point) iterator.next();
                g.setColor(Color.BLUE);
                g.fillOval(point.x,point.y,10,10);
            }
        }
        public void addPoint(Point point){
            ponits.add(point);
        }
    
    
        private class MyMouseListener extends MouseAdapter {
            @Override
            public void mousePressed(MouseEvent e) {
                MyFrame1 myFrame1 = (MyFrame1) e.getSource();
    
                addPoint(new Point(e.getX(),e.getY()));
                myFrame1.repaint();
            }
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    十、窗口监听

    package chap2;
    
    import sun.awt.WindowClosingListener;
    
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class Demo7 {
        public static void main(String[] args) {
            new Myframetwo();
        }
    }
    class Myframetwo extends Frame{
        public Myframetwo(){
            setBackground(Color.GRAY);
            setBounds(200,200,400,300);
            setVisible(true);
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    setVisible(false);
                }
    
                @Override
                public void windowActivated(WindowEvent e) {
                    setBackground(Color.yellow);
                }
            });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    十一、键盘监听

    package chap2;
    
    import javafx.animation.KeyFrame;
    
    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class Demo8 {
        public static void main(String[] args) {
            new KeyFrame1();
        }
    }
    
    class KeyFrame1 extends Frame{
        public KeyFrame1(){
            setBackground(Color.GRAY);
            setBounds(200,200,400,300);
            setVisible(true);
            this.addKeyListener(new KeyListener() {
                @Override
                public void keyTyped(KeyEvent e) {
    
                }
    
                @Override
                public void keyPressed(KeyEvent e) {
                    int keycode=e.getKeyCode();
                    if (keycode==KeyEvent.VK_UP){
                        setBackground(Color.BLUE);
                    }else {
                        setVisible(false);
                    }
                }
    
                @Override
                public void keyReleased(KeyEvent e) {
    
                }
            });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    十二、Jframe

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class Demo9 {
    
        public static void main(String[] args) {
            new Demo9().init();
        }
        public void init(){
            JFrame frame=new JFrame();
            frame.setBounds(300,300,400,500);
            frame.setVisible(true);
    //        设置文字Jlabel
            JLabel label=new JLabel("hello");
    
            label.setHorizontalAlignment(SwingConstants.CENTER);
            frame.add(label);
    
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    十三、JDialog弹窗

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Demo10 {
        public static void main(String[] args) {
            new DiaTest();
        }
    
    }
    class DiaTest extends JFrame {
        public DiaTest(){
            setVisible(true);
            setSize(400,500);
    
    //        Jframe容器 存放东西
            Container container=this.getContentPane();
    //      绝对布局
            container.setLayout(null);
    
            JButton button=new JButton("点击弹出一个对话框");
            button.setBounds(100,100,200,50);
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    new MyDialog();
                }
            });
            container.add(button);
    
        }
    }
    class MyDialog extends JDialog{
    
        public MyDialog() {
            this.setVisible(true);
            this.setBounds(100,100,200,200);
    
            Container container = this.getContentPane();
            container.setLayout(null);
    
            container.add(new JLabel("学习java"));
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    十四、Icon

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    
    // 图标是个弹窗 需要实现类 jFrame继承
    public class Demo11 extends JFrame implements Icon {
        private int width;
        private int height;
        public static void main(String[] args) {
            new Demo11().init();
    
        }
    
        public Demo11(int width, int height){
            this.width = width;
            this.height = height;
        }
    
        public Demo11(){
        }
    
        public void init(){
            Demo11 icon=new Demo11(15,15);
            JLabel icontest = new JLabel("icontest", icon, SwingConstants.CENTER);
    
            Container container=getContentPane();
            container.add(icontest);
    
    //        this.setBounds(100,100,300,400);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
    
    
        }
    
        @Override
        public void paintIcon(Component c, Graphics g, int x, int y) {
            g.fillOval(x,y,width,height);
        }
    
        @Override
        public int getIconWidth() {
            return this.width;
        }
    
        @Override
        public int getIconHeight() {
            return this.height;
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    import java.net.URL;
    
    public class Demo12 extends JFrame{
    
    
        public Demo12(){
            JLabel label=new JLabel("ImageIcon");
            URL url=Demo12.class.getResource("tx.jpg");
            ImageIcon imageIcon = new ImageIcon(url);
            label.setIcon(imageIcon);
            label.setHorizontalAlignment(SwingConstants.CENTER);
    
            Container container=getContentPane();
            container.add(label);
    
            setVisible(true);
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    
        public static void main(String[] args) {
            new Demo12();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    十五、面板

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class JpanelDemo extends JFrame {
    
        public JpanelDemo(){
            Container container=this.getContentPane();
    
            container.setLayout(new GridLayout(2,1,10,10));
    
            JPanel jPanel1 = new JPanel(new GridLayout(1,3));
            JPanel jPanel2 = new JPanel(new GridLayout(1,2));
            JPanel jPanel3 = new JPanel(new GridLayout(2,1));
            JPanel jPanel4 = new JPanel(new GridLayout(3,2));
    
            jPanel1.add(new JButton("1"));
            jPanel1.add(new JButton("1"));
            jPanel1.add(new JButton("1"));
            jPanel2.add(new JButton("1"));
            jPanel2.add(new JButton("1"));
            jPanel2.add(new JButton("1"));
            jPanel3.add(new JButton("1"));
            jPanel3.add(new JButton("1"));
            jPanel3.add(new JButton("1"));
            jPanel4.add(new JButton("1"));
            jPanel4.add(new JButton("1"));
            jPanel4.add(new JButton("1"));
    
            this.setVisible(true);
    
            container.add(jPanel1);
            container.add(jPanel2);
            container.add(jPanel3);
            container.add(jPanel4);
    
            this.setVisible(true);
            this.setSize(400,500);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    
        public static void main(String[] args) {
            new JpanelDemo();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    十六、单选框

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    import java.net.URL;
    
    public class JbuttonDemo02 extends JFrame {
    
        public static void main(String[] args) {
            new JbuttonDemo02();
        }
        public JbuttonDemo02(){
            Container container=this.getContentPane();
            URL url=JbuttonDemo02.class.getResource("tx.jpg");
            Icon icon=new ImageIcon(url);
    
            JRadioButton radioButton1=new JRadioButton("JRadioButton01");
            JRadioButton radioButton2=new JRadioButton("JRadioButton02");
            JRadioButton radioButton3=new JRadioButton("JRadioButton03");
    
            ButtonGroup buttonGroup=new ButtonGroup();
            buttonGroup.add(radioButton1);
            buttonGroup.add(radioButton2);
            buttonGroup.add(radioButton3);
    
            container.add(radioButton1,BorderLayout.CENTER);
            container.add(radioButton2,BorderLayout.NORTH);
            container.add(radioButton3,BorderLayout.SOUTH);
    
            this.setVisible(true);
            this.setSize(500,300);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    十七、复选框

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    import java.net.URL;
    
    public class JbuttonDemo03 extends JFrame{
        public static void main(String[] args) {
            new JbuttonDemo03();
        }
        public JbuttonDemo03(){
            Container container=this.getContentPane();
            URL url=JbuttonDemo02.class.getResource("tx.jpg");
            Icon icon=new ImageIcon(url);
    
            JCheckBox checkBox1=new JCheckBox("checkbox1");
            JCheckBox checkBox2=new JCheckBox("checkbox2");
    
            container.add(checkBox1,BorderLayout.NORTH);
            container.add(checkBox2,BorderLayout.SOUTH);
    
            this.setVisible(true);
            this.setSize(500,300);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    十八、下拉框

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class TestComboboxDemo extends JFrame {
        public static void main(String[] args) {
            new TestComboboxDemo();
        }
        public TestComboboxDemo(){
            Container container=this.getContentPane();
            JComboBox jComboBox=new JComboBox();
            jComboBox.addItem(null);
            jComboBox.addItem("1");
            jComboBox.addItem("2");
            jComboBox.addItem("3");
    
            container.add(jComboBox);
    
            this.setVisible(true);
            this.setSize(500,350);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    十九、滚动文本框

    package chap2;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class JscrollDemo extends JFrame {
        public static void main(String[] args) {
            new JscrollDemo();
        }
        public JscrollDemo(){
            Container container=this.getContentPane();
            JTextArea jTextArea=new JTextArea(20,50);
            jTextArea.setText("Hello");
    
            JScrollPane jScrollPane=new JScrollPane(jTextArea);
            container.add(jScrollPane);
    
            this.setVisible(true);
            this.setBounds(100,100,100,100);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    二十、密码文本框

    ackage chap2;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class JPasswordFieldDemo extends JFrame {
        public static void main(String[] args) {
            new JPasswordFieldDemo();
        }
    
        public JPasswordFieldDemo(){
            Container container=this.getContentPane();
    
            JPasswordField jPasswordField=new JPasswordField();
            jPasswordField.setEchoChar('*');
    
            container.add(jPasswordField);
    
            this.setVisible(true);
            this.setSize(500,200);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    如何去掉css 渐变时的锯齿效果
    Centos IPTABLES
    echarts
    基于Web的爬虫系统设计与实现
    运动耳机品牌排行榜前十名有哪些,2022年六款运动耳机值得入手
    pycharm连接gitlab
    VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解
    快手小范围内测将“商城”独立,并放在顶部tab位置
    Django员工管理系统
    Mysql之存储引擎
  • 原文地址:https://blog.csdn.net/Wantfly9951/article/details/127603547