云小杰

相对于绝对成功的汲汲渴求,越无杂质的奔赴,越是动人。

要一个黄昏, 满是风, 和正在落下的夕阳。如此, 足够我爱这破碎泥泞的人间。


Download the theme

Learnswing

Swing

1. GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

Java提供了三个主要包做GUI开发:

  • java.awt 包 – 主要提供字体/布局管理器
  • javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
  • java.awt.event 包 – 事件处理,后台功能的实现。

2. Swing组件

如图所示:swing组件主要可分为三个部分:

  1. 顶层容器::常用有JFrame,JDialog
  2. 中间容器:JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。
  3. 基本组件:JLabel,JButton,JTextField,JPasswordField,JRadioButton 等

img

3. 顶层容器

# 组件 描述
1 JFrame 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器)
2 JDialog 对话框

3.1 JFrame类的常用方法

JFrame类的常用方法 类型 描述
JFrame() 构造方法 创建一个普通的窗体对象
JFrame(String a) 构造方法 创建一个窗体对象,并指定标题
setSize(int width,int height) 普通方法 设置窗体大小
setBackgorund(color.red) 普通方法 设置窗体背景颜色
setLocation(int x,int y) 普通方法 设置组件的显示位置
setLocation(point p) 普通方法 通过point来设置组件的显示位置
setVisible(true/false) 普通方法 显示或隐藏组件
add(Component comp) 普通方法 向容器中增加组件
setLayout(LayoutManager mgr) 普通方法 设置局部管理器,如果设置为null表示不使用
pack() 普通方法 调整窗口大小,以适合其子组件的首选大小和局部
getContentpane() 普通方法 返回此窗口的容器对象

3.2 JFrame举例

public class MyDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Swing Example");

        // 关闭窗口的时候退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 窗口大小
        frame.setSize(400, 300);

        // 显示窗口
        frame.setVisible(true);
    }
}

4. 中间容器

# 组件 描述
1 JPanel (相当于div) 一般轻量级面板容器组件(作为JFrame中间容器)
2 JScrollPane 带滚动条的,可以水平和垂直滚动的面板组件
3 JSplitPane 分隔面板
4 JTabbedPane 选项卡面板
5 JLayeredPane 层级面板

4.1 JPanel

定义

JPanel 是 Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),如JButton、JTextArea、JTextField 等,功能是对窗体上的这些控件进行组合。

常用方法

JPanel panel = new JPanel(); // 初始化 创建面板
panel.setBorder(BorderFactory.createTitledBorder("标题"); // 给面板添加边框
panel.setLayout(); // 设置布局
panel.add(); //添加基本组件 例如按钮等。

简单例子

public class MyDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Swing Example");

        // 关闭窗口的时候退出整个程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /*
        设置容器
         */
        JPanel rootPanel = new JPanel();
        frame.setContentPane(rootPanel);

        /*
        添加控件
         */
        JButton button = new JButton("测试");
        rootPanel.add(button);

        // 窗口大小
        frame.setSize(400, 300);

        // 显示窗口
        frame.setVisible(true);
    }
}

5. 基本组件

# 组件 描述
1 JLabel
2 JButton
3 JRadioButton 单选按钮
4 JCheckBox 复选框
5 JToggleButton 开关按钮
6 JTextField 文本框
7 JPasswordField 密码框
8 JTextArea 文本区域
9 JComboBox 下拉列表框
10 JList 列表
11 JProgressBar 进度条
12 JSlider 滑块

5.1 JLabel标签

定义

标签控件,用于显示文本。

例子

JLabel label = new JLabel("JLabel标签");
rootPanel.add(label);

// 简化
rootPanel.add(new JLabel("JLabel标签"));

方法

/*
 构造方法
*/
JLabel()// 创建无图像并且其标题为空字符串的 JLabel。
    
JLabel(Icon image)// 创建具有指定图像的 JLabel 实例。
    
JLabel(Icon image, int horizontalAlignment)//创建具有指定图像和水平对齐方式的 JLabel 实例。
    
JLabel(String text)// 创建具有指定文本的 JLabel 实例。

JLabel(String text, Icon icon, int horizontalAlignment)//创建具有指定文本、图像和水平对齐方式的 JLabel 实例。

JLabel(String text, int horizontalAlignment)//创建具有指定文本和水平对齐方式的 JLabel 实例。
    
/* JLabel中增加图片和文本 */
ImageIcon imageIcon = new ImageIcon("yourFile.gif");
JLabel label = new JLabel("Mixed", imageIcon, SwingConstants.RIGHT);
frame.add(label);

/* JLabel中增加HTML文本 */
JLabel label = new JLabel("<html>bold <br> plain</html>");
frame.add(label);

/*
常用方法
*/

void setText(String text) // 设置文本

void setIcon(Icon icon) // 设置图像

// 设置文本相对于图片的位置(文本默认在图片右边垂直居中)
void setHorizontalTextPosition(int textPosition)
void setVerticalTextPosition(int textPosition)

// 设置标签内容(在标签内)的对其方式(默认左对齐并垂直居中)
void setHorizontalAlignment(int alignment)
void setVerticalAlignment(int alignment)

// 设置文本的字体类型、样式 和 大小
void setFont(Font font)

5.2 JTextField

定义

单行文本框

例子

/* 文本框 */
JTextField textField = new JTextField(20); // 20是设置文本框的长度
rootPanel.add(textField);

方法

/* 构造函数 */
JTextField()    //用来创建一个默认的文本框
JTextField(String text)    //用来创建指定初始化信息(text)的文本框
JTextField(int columns)    //用来创建指定列数(colums)的文本框
JTextField(String text, int columns)    //结合上面两个,创建一个既有初始化信息,又指定列数的文本框

/* 设置文本 */
setText(str);
/* 获取文本 */
getText();
/* 设置字体 */
setFont();  // 例如 setFont(new Font("楷体", Font.BOLD, 0x12));
/* 设置文本框的水平对齐方式 */
setHorizontalAlignment() // 例如 setHorizontalAlignment(JTextField.CENTER);
/* 设置文本框的最多显示内容的列数 */
setColumns();

5.3 JCheckBox

定义

复选框

例子

/* 复选框 */
JCheckBox checkBox = new JCheckBox("同意");
rootPanel.add(checkBox);

常用方法

setSelected(true/false) // 设置是否选中
isSelected() // 是否选中
addActionListener() // 勾选或取消选中获取事件
    
/* 简单例子 */
JCheckBox checkBox = new JCheckBox("同意");
JButton button = new JButton("测试");
checkBox.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        if (checkBox.isSelected())
            button.setEnabled(true);
        else button.setEnabled(false);
    }
});
/* 复选框 */
rootPanel.add(checkBox);

JComboBox

定义

下拉列表

例子

方法

最近的文章

等差数组

等差数组413. 等差数列划分题目描述如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自...…

继续阅读
更早的文章

713. 乘积小于 k 的子数组

713. 乘积小于 K 的子数组题目描述给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0...…

继续阅读