一、Swing 是什么?
Swing 是 Java 用来做图形界面的工具包。
之前我们写的程序都是黑框框(控制台),Swing 可以做出窗口、按钮、输入框这些看得见摸得着的东西。
控制台程序 = 打电话(只能听到声音)
Swing 程序 = 面对面聊天(看到窗口、按钮、图片)
二、第一个 Swing 窗口
下面这段代码,可以弹出一个空白窗口:
java
import javax.swing.JFrame;
public class MyWindow {
public static void main(String[] args) {
JFrame frame = new JFrame("我的第一个窗口");
frame.setSize(400, 300); // 宽400,高300
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 点叉号退出
frame.setVisible(true); // 让窗口显示出来
}
}
运行效果:一个空窗口,标题是“我的第一个窗口”。
三、往窗口里加东西
只显示空窗口太无聊了,我们加一个按钮和一个标签。
java
import javax.swing.;
import java.awt.;
public class MyFirstGUI {
public static void main(String[] args) {
JFrame frame = new JFrame("Swing 示例");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建一个面板(可以放组件的容器)
JPanel panel = new JPanel();
// 创建组件
JLabel label = new JLabel("点一下按钮:");
JButton button = new JButton("点我");
// 把组件加到面板上
panel.add(label);
panel.add(button);
// 把面板放到窗口里
frame.add(panel);
frame.setVisible(true);
}
}
运行效果:一个窗口里有一行文字和一个按钮,按钮可以点,但点了还没反应(后面加事件)。
四、让按钮有反应:事件监听
按钮点了要做事,需要给按钮加一个监听器。
java
button.addActionListener(e -> {
label.setText("你点了我!"); // 改变标签的文字
});
完整的代码:
java
import javax.swing.;
import java.awt.;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ClickDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("按钮事件");
frame.setSize(400, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JLabel label = new JLabel("还没点");
JButton button = new JButton("点我试试");
// 给按钮添加事件(lambda写法)
button.addActionListener(e -> {
label.setText("你点了我!");
});
panel.add(label);
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
点一下按钮,文字从“还没点”变成“你点了我!”。
五、常用 Swing 组件(一张表)
组件 英文名 作用
窗口 JFrame 最大的框框
面板 JPanel 中间容器,用来放组件
标签 JLabel 显示文字或图片
按钮 JButton 可点击
文本框 JTextField 让用户输入一行文字
密码框 JPasswordField 输入时显示*号
复选框 JCheckBox 打勾/不打勾
单选按钮 JRadioButton 多选一
六、布局管理器(让组件不挤在一起)
组件默认会被布局管理器安排位置。最常用的三种:
布局 特点 代码
FlowLayout 从左到右排,排不下换行 panel.setLayout(new FlowLayout())
BorderLayout 东西南北中五个区域 frame.add(btn, BorderLayout.NORTH)
GridLayout 表格一样均匀排列 panel.setLayout(new GridLayout(2,3))
Swing 不难,就是搭积木:
创建 JFrame 窗口
创建面板 JPanel
创建各种组件(标签、按钮、输入框)
把组件加到面板上
给按钮加事件 addActionListener
最后 setVisible(true)
