自己考试当时写的笔记,想着还是分享出来。之前考试的时候写的,值得一提的是考试所用的 IDE 非常弱智,我们考场的老师都不会用,最后当 txt 写的代码,都没跑着试一下……可能是因为 Java 考的人太少的原因?
本篇博客侧重于xJava 的 GUI 语法,这个早就被淘汰的技术,不知为什么成为了 Java 二级考试的压轴题。
推荐题库:java.code2ji.cn
📚 Java GUI 基础语法全解析
在 Java 中,GUI(图形用户界面)开发主要依靠两套工具包:
| 工具包 | 全称 | 特点 | 二级考试出场率 |
|---|---|---|---|
| AWT | Abstract Window Toolkit | 早期的 GUI 工具包,依赖本地系统外观,功能较少 | 几乎不单独考,Swing 底层用它 |
| Swing | - | 纯 Java 实现的 GUI,跨平台外观一致,功能丰富 | 100% 压轴题 |
在考试中,Swing 是绝对主角,几乎所有窗口、按钮、输入框都来自它。
1. 顶层窗口 —— JFrame
JFrame 是 Swing 提供的窗口类,你的所有 GUI 组件都要放在它里面。
常用方法表:
| 方法 | 作用 | 示例 |
|---|---|---|
setTitle(String) | 设置窗口标题 | setTitle("QQ2025正式版") |
setSize(int, int) | 设置窗口宽高 | setSize(400, 300) |
setBounds(x, y, w, h) | 设置位置和大小 | setBounds(100, 100, 400, 300) |
setDefaultCloseOperation(int) | 设置关闭行为 | EXIT_ON_CLOSE 表示直接退出 |
setLocationRelativeTo(null) | 窗口居中 | setLocationRelativeTo(null) |
setResizable(boolean) | 是否允许调整大小 | setResizable(false) |
setVisible(boolean) | 显示窗口 | setVisible(true) |
应试提示:二级考试喜欢
extends JFrame的写法,这样直接在类中操作窗口本身。
2. 布局管理器
Swing 默认会用布局管理器(如 BorderLayout)自动安排组件位置。但考试里常用绝对定位:
this.setLayout(null); // 不使用布局管理器
组件.setBounds(x, y, width, height);
常见布局对比:
| 布局 | 特点 | 考试出场率 |
|---|---|---|
| null(绝对布局) | 手动设置位置,直观,考试常用 | 高 |
| FlowLayout | 从左到右排列,自动换行 | 中 |
| BorderLayout | 上、下、左、右、中五个区域 | 低 |
| GridLayout | 网格布局,平均分割空间 | 中低 |
3. 常用 Swing 组件
| 组件 | 类名 | 常用方法 |
|---|---|---|
| 文本框 | JTextField | getText() 获取文本 |
| 密码框 | JPasswordField | getPassword() 获取 char[] |
| 标签 | JLabel | 显示提示文字或图片 |
| 按钮 | JButton | setText()、addActionListener() |
| 复选框 | JCheckBox | isSelected() 判断是否选中 |
| 下拉框 | JComboBox | addItem() 添加选项,getSelectedItem() 获取选中值 |
| 面板 | JPanel | 容器组件,用于分组布局 |
| 弹窗 | JOptionPane | showMessageDialog()、showConfirmDialog() |
4. 获取容器并添加组件
Swing 中,JFrame 内部有一个 内容面板,你需要先获取它再添加组件:
Container con = this.getContentPane();
con.add(组件对象);
如果直接 this.add() 在某些布局下也行,但考试通常用 getContentPane()。
5. 事件监听(ActionListener)
Swing 事件采用监听器模式,按钮点击是最常考的:
JButton btn = new JButton("登录");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand(); // 获取按钮文本
JOptionPane.showMessageDialog(null, "点击了:" + cmd);
}
});
口诀:
事件三步走
- 找到事件源(按钮)
- 注册监听器(addActionListener)
- 编写处理逻辑(actionPerformed)
6. 弹窗提示 —— JOptionPane
| 方法 | 功能 |
|---|---|
showMessageDialog(null, "信息") | 普通提示框 |
showConfirmDialog(null, "确认吗?") | 确认框(是/否/取消) |
showInputDialog("请输入内容") | 输入框 |
考试几乎必考 showMessageDialog。
7. 二级 Java GUI 常见套路
- 类继承 JFrame,构造方法里设置窗口属性。
- 创建一个
init()方法放所有组件创建和事件绑定。 - 所有组件用
setBounds()定位,add()到内容面板。 - 事件监听用匿名内部类实现。
- 弹窗提示用
JOptionPane。
记住这个套路,即使没见过题,也能快速写出能跑的界面。
🔥 真题实战:QQ 登录界面

这是一道综合性的 GUI 编程题:
题目要求:创建一个模拟 QQ 登录界面的程序
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main extends JFrame { // 继承 JFrame
private JTextField username;
private JPasswordField password;
private JLabel jl3;
private JLabel jl4;
private JButton bu1;
private JButton bu2;
private JButton bu3;
private JCheckBox jc1;
private JCheckBox jc2;
private JComboBox<String> jcb;
public Main() {
this.setTitle("QQ2025正式版"); // 设置窗口标题
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭操作
this.setLayout(null); // 使用绝对定位
this.setBounds(0, 0, 355, 265); // 设置窗口大小和位置
this.setResizable(false); // 禁止调整大小
this.setLocationRelativeTo(null); // 居中显示
this.setVisible(true); // 显示窗口
}
public void init() {
Container con = this.getContentPane(); // 获取内容面板
// 创建用户名输入框
username = new JTextField();
username.setBounds(50, 50, 150, 20);
jl3 = new JLabel("注册账号");
jl3.setBounds(210, 50, 70, 20);
// 创建密码输入框
password = new JPasswordField();
password.setBounds(50, 80, 150, 20);
jl4 = new JLabel("找回密码");
jl4.setBounds(210, 80, 70, 20);
// 创建复选框
jc1 = new JCheckBox("记住密码");
jc1.setBounds(125, 135, 80, 15);
jc2 = new JCheckBox("自动登录");
jc2.setBounds(215, 135, 80, 15);
// 创建下拉框
jcb = new JComboBox<>();
jcb.addItem("在线");
jcb.addItem("隐身");
jcb.addItem("离开");
jcb.setBounds(40, 135, 55, 20);
// 创建按钮并添加事件监听器
bu1 = new JButton("登录");
bu1.setBounds(250, 200, 65, 20);
bu1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String getName = username.getText();
JOptionPane.showConfirmDialog(null, "您输入的用户名是 " + getName);
}
});
bu2 = new JButton("多账号");
bu2.setBounds(25, 200, 75, 20);
bu3 = new JButton("设置");
bu3.setBounds(140, 200, 65, 20);
// 将所有组件添加到容器中
con.add(username);
con.add(password);
con.add(jl3);
con.add(jl4);
con.add(jc1);
con.add(jc2);
con.add(jcb);
con.add(bu1);
con.add(bu2);
con.add(bu3);
}
public static void main(String[] args) {
new Main();
}
}
执行结果:

真不是我夸,这题库太妙了,这个 GUI 功能简直点睛之笔。
结语:
差不多也就这些内容(其实真不少)
题库平台最后还是拿出来夸一下:java.code2ji.cn


被折叠的 条评论
为什么被折叠?



