Java GUI-Swing详解

文章目录

    • 一、GUI-Swing
      • 1. Swing介绍
      • 2. 窗口
      • 3. 弹窗
      • 4. 标签
        • 1)图标标签
        • 2)图片标签
      • 5. 面板
        • 1)普通面板
        • 2)带有滚动条的面板
      • 6. 按钮
        • 1)图片按钮
        • 2)单选按钮
        • 3)复选按钮
      • 7. 列表
        • 1)下拉框
        • 2)列表框
      • 8. 文本框
        • 1)文本框
        • 2)密码框
        • 3)文本域

一、GUI-Swing

1. Swing介绍

  • 什么是Swing
    • 也是Java图形用户界面的处理方法,不过Swing是高级图形库,是基于Awt平台为基础构建起来的组件
  • Swing特点
    • 是轻量级的,没有使用Windows函数
    • 移植性好,因为没有使用Windows平台的函数,而是使用虚拟机进行调用,所以可以在任意的平台运行,没有平台限制
    • 运行较慢,在Windows平台运行下还是Awt更快

2. 窗口

  • JFrame

  • 作用

    • Swing中的顶级窗口,也是容器,用来存放其他的容器与组件
  • 注意事项

    • 在JFrame窗口中,并不是直接在窗口上进行操作的,而是隔了一个默认的ContentPane容器,优先展示的是ContentPane的属性设置。所以有时候会发生对JFrame窗口进行设置后,看不到设置的结果,就是因为优先展示的是ContentPane的设置。
    • 使用getContentPane()方法得到这个窗口容器
    • 建议除了窗口的关闭按钮、大小、位置、可见性等,其他颜色、布局、添加组件等操作都在窗口容器中进行操作
  • 代码示例

    • 创建一个JFrame窗口,并在窗口的中间添加一个标签
    public class WindowJFrame {//Swing中Jframe窗口练习
    
        public static void main(String[] args) {
            new WindowJFrame("Swing中JFrame窗口练习");
        }
    
        public WindowJFrame(String total) {
            JFrame frame = new JFrame(total);//创建JFrame窗口
    
            //设置窗口的位置大小属性
            frame.setBounds(100, 100, 500, 500);
    
            //获得窗口的容器
            Container container = frame.getContentPane();
            //使用窗口容器设置窗口的布局为绝对布局
            container.setLayout(null);
    
    
            //设置标签
            Label label = new Label("这是JFrame窗口的标签");
            label.setBackground(Color.yellow);
            label.setBounds(200, 200, 150, 50);
    
            //将标签添加进窗口容器中
            container.add(label);
    
            //设置可见性及窗口的关闭按钮
            frame.setVisible(true);
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

3. 弹窗

  • JDialog

  • 作用

    • 创建一个对话框窗口(弹窗)
    • 这个弹窗默认实现了关闭按钮的功能,不用再手动实现
  • 代码练习

    • 创建一个窗口,窗口中间添加一个JButton按钮,当点击这个按钮时,就弹出一个弹窗
    public class JDialogTest extends JFrame {//Swing弹窗练习
    
        public static void main(String[] args) {
            new JDialogTest("Swing中弹窗JDialog的练习");
        }
    
        public JDialogTest(String total) {
            //设置窗口
            super(total);
            this.setBounds(100, 100, 500, 500);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            this.setResizable(false);//设置窗口是否可拉伸
    
            //得到窗口的容器,用来设置布局,放置组件
            Container container = this.getContentPane();
            //设置窗口容器的布局
            container.setLayout(null);//设置为绝对布局
    
            //创建一个JButton按钮
            JButton button = new JButton("点击我,你就可以获得一个弹窗");
            button.setBounds(150, 200, 250, 50);
            button.setBackground(Color.yellow);
    
            //设置JButton按钮的触发事件,弹出一个弹窗
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    new MyJDialog("这是我的弹窗");//创建弹窗
                }
            });
    
            //将JButton按钮放进容器中
            container.add(button);
        }
    }
    
    class MyJDialog extends JDialog {
        public MyJDialog(String total) {
            //设置弹窗
            this.setBounds(500, 50, 400, 400);
            this.setVisible(true);/*不需要因为弹窗自实现窗口关闭功能*/
            this.setTitle("你想要的小弹窗");
            this.setResizable(false);
    
            //获得弹窗的容器
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建标签
            JLabel label = new JLabel("我的弹窗标签");
            label.setBounds(150, 100, 100, 50);
            label.setBackground(Color.cyan);
    
            //将JLabel标签放进弹窗中
            container.add(label);
        }
    }

4. 标签

1)图标标签

  • 作用

    • 绘制一个图标,放在标签或按钮上面
  • 代码练习

    • 创建一个窗口,在窗口的中间添加一个JLabel标签,在标签上绘制一个矩形
    public class IconTest extends JFrame implements Icon {//Swing图标练习
    
        private int width;
        private int height;
    
        public static void main(String[] args) {
            new IconTest().init();
        }
    
        /**
         * 初始化方法
         */
        private void init() {
            IconTest frame = new IconTest(50, 30);
            this.setBounds(100, 100, 500, 500);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            this.setResizable(false);
            this.setVisible(true);
    
            JLabel label = new JLabel("图标", frame, SwingConstants.CENTER);
    
            //得到窗口的容器
            Container container = this.getContentPane();
            //将标签添加进窗口容器中
            container.add(label);
        }
    
        public IconTest() {
        }
    
        public IconTest(int width, int height) {
            this.width = width;
            this.height = height;
        }
    
        @Override
        public void paintIcon(Component c, Graphics g, int x, int y) {
            g.setColor(Color.YELLOW);
            g.fillRect(x, y, 50, 30);
        }
    
        @Override
        public int getIconWidth() {
            return this.width;
        }
    
        @Override
        public int getIconHeight() {
            return this.height;
        }
    }

2)图片标签

  • ImageIcon

  • 作用

    • 将一个图片放标签或按钮上面
  • 代码练习

    • 将一个图片放在标签上
    public class ImageTest {//将一个图片设为标签的图案
    
        public static void main(String[] args) {
            new MyJFrame("将图片设置为标签的图案练习");
        }
    }
    
    class MyJFrame extends JFrame {
        public MyJFrame() {
            super();
        }
    
        public MyJFrame(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
            //得到图片的资源
            URL url = MyJFrame.class.getResource("littleRobot.jpg");//括号内是图片的路径
            //将图片转为图标
            ImageIcon imageIcon = new ImageIcon(url);
    
            JLabel label = new JLabel("我的标签");
            label.setSize(26, 23);
            label.setLocation(150, 150);
            //将图标与标签关联
            label.setIcon(imageIcon);
            label.setHorizontalAlignment(SwingConstants.CENTER);
    
            //创建窗口容器,并将标签添加进去
            Container container = this.getContentPane();
            container.add(label);
    
            this.setVisible(true);//最有再将窗口设置为可见
        }
    }

5. 面板

1)普通面板

  • JPanel

  • 作用

    • 是一个轻量级的容器
  • 代码练习

    • 创建一个窗口,练习按钮的表格
    public class JPanelTest {//JPanel面板练习
    
        public static void main(String[] args) {
            new MyJPanelFrame("JPanel面板练习");
        }
    }
    
    /**
     * 自定义的窗口类
     */
    class MyJPanelFrame extends JFrame {
        public MyJPanelFrame(String tital) {
            super(tital);
            this.setBounds(100, 100, 500, 500);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
            //得到窗口的容器,并将窗口布局为两行两列的表格
            Container container = this.getContentPane();
            container.setLayout(new GridLayout(2, 2, 10, 10));//后面的两个10分别表示上下与左右间距
    
            //创建四个面板
            JPanel panel1 = new JPanel(new GridLayout(2, 1));
            JPanel panel2 = new JPanel(new GridLayout(1, 2));
            JPanel panel3 = new JPanel(new GridLayout(2, 2));
            JPanel panel4 = new JPanel(new GridLayout(2, 3));
    
            //往面板中添加JButton按钮
            panel1.add(new JButton("1"));
            panel1.add(new JButton("1"));
            panel2.add(new JButton("2"));
            panel2.add(new JButton("2"));
            panel3.add(new JButton("3"));
            panel3.add(new JButton("3"));
            panel3.add(new JButton("3"));
            panel3.add(new JButton("3"));
            panel4.add(new JButton("4"));
            panel4.add(new JButton("4"));
            panel4.add(new JButton("4"));
            panel4.add(new JButton("4"));
            panel4.add(new JButton("4"));
            panel4.add(new JButton("4"));
    
            //将四个面板装进窗口容器中
            container.add(panel1);
            container.add(panel2);
            container.add(panel3);
            container.add(panel4);
    
            //将窗口设置为可见的
            this.setVisible(true);
        }
    }

2)带有滚动条的面板

  • JScrollPanel

  • 作用

    • 一个带有滚动条的面板
  • 代码练习

    • 创建一个带有滚动条的文本窗口
    public class JScrollPanelTest extends JFrame {//滚动面板及文本域练习
    
        public static void main(String[] args) {
            new JScrollPanelTest("滚动面板及文本域的练习");
        }
    
        public JScrollPanelTest(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            //创建文本域,并设置文本域
            JTextArea textArea = new JTextArea("文本域");//内容
            textArea.setBounds(200, 200, 200, 300);//大小和位置
            textArea.setBackground(new Color(222, 230, 225));//颜色
    
            //创建滚动面板
            JScrollPane scrollPane = new JScrollPane(textArea);
    
            //创建窗口的容器,将滚动面板添加进窗口容器中
            Container container = this.getContentPane();
            container.add(scrollPane);
    
            //设置窗口的关闭及显示等
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭
            this.setVisible(true);//可见性
            this.setResizable(false);//是否可拉伸
        }
    }

6. 按钮

1)图片按钮

  • ImageIcon

  • 作用

    • 将一个图片作为按钮的图标
  • 代码示例

    • 将一个图片设置为JButton按钮的图标
    public class PictureJButtons extends JFrame {//图片按钮练习
    
        public static void main(String[] args) {
            new PictureJButtons("图片按钮练习");
        }
    
        public PictureJButtons(String title) {
    
            //创建窗口
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            //获得窗口的容器
            Container container = this.getContentPane();
            container.setLayout(null);//设置窗口布局为绝对布局
    
            //获得图片图标
            URL url = PictureJButtons.class.getResource("wechatIcon.png");
            ImageIcon imageIcon = new ImageIcon(url);
    
            //创建JButton按钮,并与图片图标相关联
            JButton button = new JButton();
            button.setIcon(imageIcon);
            button.setBounds(230, 230, 38, 38);
    
            //将JButton按钮放进窗口容器中
            container.add(button);
    
            //设置窗口的关闭及可见性
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

2)单选按钮

  • JRadioButton

  • 作用

    • 单选按钮,同一组(ButtonGroup)中只能有一个按钮被选中
  • 代码练习

    • 实现三个单选按钮,让用户选择左中右
    public class SingleButtons extends JFrame {//单选按钮的练习
    
        public static void main(String[] args) {
            new SingleButtons("单选按钮的练习");
        }
    
        public SingleButtons(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建单选按钮
            JRadioButton leftButton = new JRadioButton("LEFT");
            leftButton.setBounds(120, 230, 80, 40);
            JRadioButton rightButton = new JRadioButton("CENTER");
            rightButton.setBounds(230, 230, 80, 40);
            JRadioButton centerButton = new JRadioButton("RIGHT");
            centerButton.setBounds(340, 230, 80, 40);
    
            //创建单选框的分组,一组之中同时只能选择一个按钮
            ButtonGroup group = new ButtonGroup();
            //将按钮放置进分组中
            group.add(leftButton);
            group.add(rightButton);
            group.add(centerButton);
    
            //将分组放进窗口容器中
            container.add(leftButton);
            container.add(rightButton);
            container.add(centerButton);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

3)复选按钮

  • JCheckBox

  • 作用

    • 可以选择复选框中的多个选项
  • 代码练习

    • 实现复选按钮,可以选择多个
     */
    public class CheckButtons extends JFrame {//复选按钮的练习
    
        public static void main(String[] args) {
            new CheckButtons("复选按钮的练习");
        }
    
        public CheckButtons(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            Container container = this.getContentPane();
            container.setLayout(null);//采用绝对布局
    
    
            //创建复选按钮
            JCheckBox checkBox1 = new JCheckBox("选项1");
            checkBox1.setBounds(150, 230, 80, 40);
            JCheckBox checkBox2 = new JCheckBox("选项2");
            checkBox2.setBounds(280, 230, 80, 40);
    
    
            //将复选按钮放进窗口容器中
            container.add(checkBox1);
            container.add(checkBox2);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

7. 列表

1)下拉框

  • JComboBox

  • 作用

    • 多个指定的选值,用户可以从多个指定的选值之中选择一个
    • 选择地域、年龄段、性别等有固定内容的、不希望用户随意输入的选项时用到
  • 代码练习

    • 让用户选择自己的年龄段
    public class DropDownBoxs extends JFrame {//下拉框的练习
        public static void main(String[] args) {
            new DropDownBoxs("下拉框的练习");
        }
    
        public DropDownBoxs(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建下拉框及设置
            JComboBox<String> comboBox = new JComboBox<>();
            comboBox.setBounds(100, 200, 300, 30);
            comboBox.setBackground(Color.cyan);
    
            //给下拉框中添加文字
            comboBox.addItem("0--20岁");
            comboBox.addItem("20--30岁");
            comboBox.addItem("30--50岁");
            comboBox.addItem("50--70岁");
            comboBox.addItem("70--100岁");
    
            //将下拉框添加进窗口容器中
            container.add(comboBox);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

2)列表框

  • JList

  • 作用

    • 显示对象列表,可以与集合相关联,动态的展示集合中的信息
  • 代码练习

    • 使用列表框将集合中的元素显示出来
    public class ListBoxs extends JFrame {//列表框的练习
    
        public static void main(String[] args) {
            new ListBoxs("列表框的练习");
        }
    
        public ListBoxs(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建列表框,并与集合相关联
            Vector<String> vector = new Vector<>();//创建集合
            JList<String> list = new JList<>(vector);//创建列表,与集合相关联,列表中展示集合中的元素
            list.setBounds(100, 100, 300, 300);
    
            //给集合中添加元素
            vector.add("ZhangSan------23");
            vector.add("LiSi------24");
            vector.add("WangWu------25");
            vector.add("ZhaoLiu------26");
    
            //将列表框添加进窗口容器
            container.add(list);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

8. 文本框

1)文本框

  • JTextField

  • 作用

    • 只能接收用户单行输入,遇到回车会自动触发事件
  • 代码练习

    • 创建一个文本框,可以接收用户输入的信息
    public class JTextFields extends JFrame {//文本框的练习,文本框一次只能输入一行
    
        public static void main(String[] args) {
            new JTextFields("文本框的练习");
        }
    
        public JTextFields(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建文本框
            JTextField textField = new JTextField();
            textField.setBounds(100, 100, 300, 30);
    
            //将文本框与窗口容器关联
            container.add(textField);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

2)密码框

  • JPasswordField

  • 作用

    • 密码框,用户看不到输入的内容,但是后台可以接收到实际的内容
  • 代码练习

    • 创建一个密码框
    public class PasswordBoxs extends JFrame {//密码框的练习
    
        public static void main(String[] args) {
            new PasswordBoxs("密码框的练习");
        }
    
        public PasswordBoxs(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
    
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建密码框
            JPasswordField passwordBox = new JPasswordField("我是密码框");
            passwordBox.setBounds(100, 100, 300, 30);
            //将用户输入的字符样式更改为指定的字符
            //passwordBox.setEchoChar('*');
    
            //将密码框添加进窗口容器中
            container.add(passwordBox);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

3)文本域

  • JTextArea

  • 作用

    • 一个支持多行输入的文本域,带有滚动条
  • 代码练习

    • 创建一个文本域
    public class TextAreas extends JFrame {//文本域的练习
    
        public static void main(String[] args) {
            new TextAreas("文本域的练习");
        }
    
        public TextAreas(String title) {
            super(title);
            this.setBounds(100, 100, 500, 500);
            Container container = this.getContentPane();
            container.setLayout(null);
    
            //创建文本域
            TextArea textArea = new TextArea("文本域");
            textArea.setBounds(100, 100, 300, 300);
    
            //将文本域添加进窗口容器中
            container.add(textArea);
    
            //窗口关闭等设置
            this.setResizable(false);
            this.setVisible(true);
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    }

你可能感兴趣的:(JavaSE)