Swing 程序学习

这篇博客详细介绍了Swing GUI程序开发的基础知识,包括Swing的特点、主要组件、窗体、布局管理器和常见组件如JFrame、JDialog、JLabel、JButton等的使用方法。此外,还讲解了事件监听器的基本概念和应用,为Java图形界面编程提供了全面的指南。
摘要由CSDN通过智能技术生成

Swing 程序学习


一、Swing 概述

  • Swing 主要用来开发 GUI 程序,GUI(Graphical User Interface)即图形用户界面。Java 中针对 GUI 设计提供了丰富的类库,这些类分别位于 java.awt 和 java.swing 中,简称 AWT 和 Swing ;其中,AWT(Abstract Window Toolkit)是抽象窗口工具包,是 Java 平台独立的窗口系统、图形和用户界面器件的工具包,其组件种类有限,无法实现目前 GUI 设计所需的所有功能。Swing 是 AWT 组件的增强组件,实现了 AWT 的所有功能的基础上,提供更加丰富的组件和功能,是目前开发 Java 图形界面程序的首选。

1、Swing 特点

  • Swing 组件完全由 Java 语言编写,可以运行在任何平台上,因此将 Swing 组件称为“轻量级组件”;相反,依赖于本地平台的组件被称为“重量级组件”。

2、Swing 包

  • Swing 包中比较重要的类是 Component 类(组件类)、Container 类(容器类)和 JComponent 类(Swing 组件父类)。
  • 在 Swing 组件中,大多数 GUI 组件都是 Component 类的直接子类或间接子类,而 JComponent 类是 Swing 组件各种特性的存放位置,这些组件的特性包括设定组件边界、GUI 组件自动滚动等。

3、常用 Swing 组件概述

  • 常用 Swing 组件如下表:

    组件名称 定义
    JButton 代表 Swing 按钮,按钮可以带文字或图片
    JCheckBox 代表 Swing 中的复选框控件
    JComBox 代表下拉列表框,可以在下拉区域显示多个选项
    JFrame 代表 Swing 框架类
    JDialog 代表 Swing 版本的对话框
    JLabel 代表 Swing 中的标签组件
    JRadioButton 代表 Swing 的单选按钮
    JList 代表能够在用户界面显示一系列条目的组件
    JTextField 代表文本框
    JPasswordField 代表密码框
    JTextArea 代表 Swing 中的文本区域
    JOptionPane 代表 Swing 中的一些对话框

二、常用窗体

  • Swing 中常用的窗体包括 JFrame 和 JDialog

1、JFrame 窗体

  • JFrame 窗体是一个容器,是 Swing 程序中各个组件的载体。在开发应用程序时可以通过继承 javax.swing.JFrame 类创建一个窗体,在这个窗体中添加组件。

  • JFrame 类常用的构造方法包括以下两种方式:

    1)public Jframe():创建一个初始不可见、没有标题的新窗体。

    2)public JFrame(String title):创建一个不可见但具有标题的窗体。

  • 示例:

    JFrame jf = new JFrame(title);
    Container container = jf.getContaintPane();
    container.add(new JButton("按钮"));  //添加按钮控件
    container.remove(new JButton("按钮"));  //移除按钮控件
    
  • 设置窗体属性的常用方法如下:

    1)setBounds(int x, int y, int width, int height):设置组件左上角顶点的坐标为(x, y),宽度为 width,高度为 height。

    2)setLocation(int x, int y):设置组件左上角的坐标为(x, y)

    3)setSize(int width, int height):设置组件的宽度和高度

    4)setVisible(boolean b):设置组件是否可见,true为可见,反之则反

    5)setDefaultCloseOperation(int operation):设置以什么方式关闭 Jframe 窗体,默认值为 DISPOSE_ON_CLOSE。

    • JFrame 窗体关闭的几种方式:

      窗体关闭方式 实现功能
      DO_NOTHING_ON_CLOSE 表示单击“关闭”按钮时无任何操作
      DISPOSE_ON_CLOSE 表示单击“关闭”按钮时隐藏丙释放窗口
      HIDE_ON_CLOSE 示单击“关闭”按钮时将当前窗口隐藏
      EXIT_ON_CLOSE 示单击“关闭”按钮时退出当前窗口并关闭程序
  • 实例:

    import java.awt.*;
    import javax.swing.*;
    
    public class JFrameTest extends JFrame{
         
        public void CreateJFrame(String title){
         
            JFrame jf = new JFrame(title);  //创建 JFrame 对象
            Container ct = jf.getContentPane();  //获取一个容器
            JLabel jl = new JLabel("这是一个 JFrame 窗体");  // 创建一个 JLabel 标签
            //使标签文字居中
            jl.setHorizontalAlignment(SwingConstants.CENTER);
            ct.add(jl);  //将标签添加到容器中
            ct.setBackground(Color.white);   //设置容器的背景颜色
            jf.setVisible(true);  //使窗体可见
            jf.setSize(800,600);
            //设置窗体关闭方式
            jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    
        public static void main(String[] args) {
         
            new JFrameTest().CreateJFrame("创建一个 JFrame 窗体");
        }
    }
    

2、JDialog 窗体

  • JDialog 窗体是 Swing 组件中的对话框,继承了 AWT 组件中的 java.awt.Dialog 类。

  • 在应用程序中创建 JDialog 窗体需要实例化 JDialog 类,通常使用以下几个构造方法:

    1)public JDialog():创建一个没有标题和父窗体的对话框。

    2)public JDialog(Frame f):创建一个指定父窗体的对话框,但对话框没有标题。

    3)public JDialog(Frame f, boolean model):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。如果 model 为 true ,则弹出对话框后,用户无法操作父窗体。

    4)public JDialog(Frame f, String title):创建一个指定标题和父窗体的对话框

    5)public JDialog(Frame f, String title, boolean model):创建一个指定标题、窗体和模式的对话框。

  • 实例:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    class MyJDialog extends JDialog {
         
        public MyJDialog(MyFrame frame) {
         
            //实例化一个 Jdialog 类对象,指定对话框的父窗体、窗体标题和类型
            super(frame, "第一个JDialog窗体", true);
            Container ct = getContentPane(); //创建容器
            ct.add(new JLabel("这是一个对话框"));  //添加标签
            setBounds(120, 120, 300, 300);  //设置对话框窗体在桌面显示的坐标和大小
        }
    }
    
    public class MyFrame extends JFrame {
         
        public MyFrame(){
         
            Container ct = getContentPane();  //获得窗体容器
            ct.setLayout(null);  //容器使用null布局
            JButton b1 = new JButton("弹出对话框");  //定义一个按钮
            b1.setBounds(10,10,100,21);  //定义按钮在容器中的坐标和大小
            b1.addActionListener(new ActionListener() {
         
                @Override
                public void actionPerformed(ActionEvent e) {
         
                    //创建对话框
                    MyJDialog Dlg = new MyJDialog(MyFrame.this);
                    Dlg.setVisible(true);  //使MyDialog窗体可见
                }
            });
            ct.add(b1);  //将按钮添加到容器中
            ct.setBackground(Color.WHITE);  //窗体背景设置为白色
            setSize(800,600);  //窗口大小
            //窗口关闭结束程序
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setVisible(true);  //使窗口可见
        }
    
        public static void main(String[] args) {
         
            new MyFrame();  //实例化 MyFrame 类对象
        }
    }
    

三、常用布局管理器

  • 在 Swing 中,每个组件在容器中都有一个具体的位置和大小,而容器中摆放组件时候很难判断其具体位置和大小;使用布局管理器较程序员直接在容器中控制 Swing 组件的位置和大小方便得多,可以有效地处理整个窗体的布局。Swing 提供的常用布局管理器有 FlowLayout 流布局管理器、BorderLayout 边界布局管理器和 GridLayout 网格布局管理器,这些布局管理器都位于 java.awt 包中。

1、绝对布局

  • 绝对布局,就是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置。

  • 设置绝对布局的方法有两种,分别如下:

    1)使用 Container.setLayout(null) 方法取消布局管理器。

    2)使用 Container.setBounds() 方法设置每个组件的大小和位置。

  • 例子:

    import javax.swing.*;
    import java.awt.*;
    
    public class AbsolutePosition extends JFrame {
         
        public AbsolutePosition(){
         
            setTitle("本窗体使用绝对布局");
            setLayout(null); //使该窗体取消布局管理器
            /*
             * 定位窗体的坐标位置和宽高
             * 窗体在屏幕中的 x 坐标为 0,y 坐标为 0,窗体高400像素,宽600像素
             */
            setBounds(0,0,600,400);
            Container c = getContentPane();
            JButton b1 = new JButton("按钮1");
            JButton b2 = new JButton("按钮2");
    
            /*
             * 设置按钮的位置和大小
             * 按钮1的横坐标为10,纵坐标为30,宽80像素,高30像素
             * 按钮2的横坐标为60,纵坐标为70,宽100像素,高20像素
             */
            b1.setBounds(10,30,80,30);
            b2.setBounds(60,70,100,20);
            b2.setVisible(true);
            b1.setVisible(true);
            c.add(b1);
            c.add(b2);
            c.setBackground(Color.WHITE);  //窗体背景设置为白色
            setVisible(true);
    
            //设置窗体关闭方式
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
    
        public static void main(String[] args) {
         
            new AbsolutePosition();
        }
    
    }
    

2、流布局

  • 流布局管理器是最基本的布局管理器,在整个容器中的布局像“流”一样,从左到右摆放组件,直到占据这一行的所有空间,再向下移动一行。

  • FlowLayout 类具有以下常用的构造方法:

    1)public FlowLayout()方法

    2)public FlowLayout(int aligment)方法

    3)public FlowLayout(int aligment, int horizGap, int vertGap)方法。

    • 构造方法中的 alignment 参数表示使用流布局管理器后组件在每一行的具体摆放位置,取值如下表:

      alignment 参数值 说明
      FlowLayout.LEFT 每一行的组件将被指定为按照左对齐排列
      FlowLayout.CENTER 每一行的组件将被指定为按照居中对齐排列
      FlowLayout.RIGHT 每一行的组件将被指定为按照右对齐排列
  • 实例:

    import javax.swing.*;
    import java.awt.*;
    
    public class FlowLayoutPosition extends JFrame {
         
        public FlowLayoutPosition(){
         
            setTitle("本窗体使用流布局管理器");  //设置窗体标题
            Container c = getContentPane();
            // 设置窗体使用流布局管理器,使组件右对齐,组件之间水平间隔为10像素,垂直间隔为10像素
            setLayout(new FlowLayout(FlowLayout.RIGHT,10,10));
            for(int i=0;i<10;i++){
         
                c.add(new Button("button"+i));
            }  //添加十个按钮
            setSize(600,400);
            setVisible(true);
    
            //设置窗体关闭方式
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        }
    
        public static void main(String[] args) {
         
            new FlowLayoutPosition();
        }
    
    }
    

3、BorderLayout 边界布局管理器

  • 创建完窗体后,在默认不指定窗体布局的情况下,Swing 组件的布局模式是边界布局,边界布局管理器将容器划分为东南西北中五个区域。

  • 在调用 Container 类的 add() 方法时,设置此组件在容器中的区域,可由 BorderLayout 以下的成员变量来控制组件在容器中的区域。

    成员变量 含义
    BorderLayout.NORTH 在容器中添加组件时,组件置于北部
    BorderLayout.SOUTH 在容器中添加组件时,组件置于南部
    BorderLayout.EAST 在容器中添加组件时,组件置于东部‘
    BorderLayout.WEST 在容器中添加组件时,组件置于西部
    BorderLayout.CENTER 在容器中添加组件时,组件于中间开始填充,直到与其他组件边界连接
  • 如果使用了边界布局管理器,在向容器中添加组件时,如果不指定添加到哪个区域,則默认添加到 CENTER 区域;如果向一个区域中同时添加多个组件,后放入的组件会覆盖先放入的组件。

  • add() 方法的常用语法格式如下:

    public void add(Component comp, Object constraints);
    comp:要添加的组件
    constraints:表示此组件的布局约束的对象
    //例子
    import javax.swing.*;
    import java.awt.*;
    
    public class BorderLayoutPosition extends JFrame {
         
        public BorderLayoutPosition() {
         
            setTitle("使用边界布局管理器");
            Container c = getContentPane();
            setLayout(new BorderLayout());  //设置边界布局管理器
            JButton centerBtn = new JButton("中"),
                    northBtn = new JButton("北"),
                    southBtn = new JButton("南"),
                    westBtn = new JButton("西"),
                    eastBtn = new JButton("东");
    
            //添加按钮到东南西北中五个区域
            c.add(centerBtn, BorderLayout.CENTER)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御承扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值