当前位置: 首页 > news >正文

Java Swing 图形界面编程


一、Swing 是什么?
Swing 是 Java 提供的图形用户界面(GUI)工具包,用来开发桌面应用程序(如记事本、计算器、桌面管理系统)。
Swing 是 javax.swing 包下的类,使用前需要导包。
二、Swing 核心继承结构
plaintext
Component (组件)
↳ Container (容器)
↳ Window (窗口)
↳ JFrame (顶层窗口,最常用)
↳ JComponent (基础组件)
↳ JButton/JLabel/JTextField/JTextArea...
三、开发第一个 Swing 程序(Hello World)
java
运行
import javax.swing.*;

// 第一个Swing窗口
public class FirstSwing {
public static void main(String[] args) {
// Swing 组件建议在事件线程中创建(规范写法)
SwingUtilities.invokeLater(() -> {
// 1. 创建窗口对象
JFrame frame = new JFrame("我的第一个Swing窗口");

// 2. 设置窗口关闭时退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

// 4. 创建一个文本标签
JLabel label = new JLabel("Hello Swing!", JLabel.CENTER);

// 5. 把组件添加到窗口
frame.add(label);

// 6. 显示窗口
frame.setVisible(true);
});
}
}
代码说明
JFrame:Swing 顶层窗口,所有组件都放在里面
setDefaultCloseOperation:设置关闭行为(必须写,否则关闭窗口程序不退出)
invokeLater:保证 Swing 组件线程安全(标准写法)
四、Swing 常用组件
1. 标签(JLabel)
显示文本 / 图片,最基础的展示组件:
java
运行
JLabel label = new JLabel("用户名:");
2. 单行输入框(JTextField)
用于输入单行文本:
java
运行
JTextField tf = new JTextField(20); // 20表示宽度
3. 密码框(JPasswordField)
输入密码自动隐藏:
java
运行
JPasswordField pf = new JPasswordField(20);
4. 按钮(JButton)
触发点击事件:
java
运行
JButton btn = new JButton("点击登录");
5. 多行文本域(JTextArea)
显示 / 输入多行文字:
java
运行
JTextArea ta = new JTextArea(5, 20);
ta.setLineWrap(true); // 自动换行
6. 复选框(JCheckBox)
多选:
java
运行
JCheckBox check = new JCheckBox("记住密码");
7. 单选框(JRadioButton)
单选,需要配合 ButtonGroup:
java
运行
JRadioButton male = new JRadioButton("男");
JRadioButton female = new JRadioButton("女");
ButtonGroup group = new ButtonGroup();
group.add(male);
group.add(female);
8. 下拉框(JComboBox)
选择列表:
java
运行
String[] citys = {"北京", "上海", "广州"};
JComboBox<String> cb = new JComboBox<>(citys);
五、布局管理器(控制组件位置)
Swing 布局用来自动排列组件,不用手动写坐标。
1. FlowLayout(流式布局)
从左到右、从上到下排列(默认布局):
java
运行
frame.setLayout(new FlowLayout());
2. BorderLayout(边界布局)
分为 5 个区域:东、西、南、北、中:
java
运行
frame.setLayout(new BorderLayout());
frame.add(btn, BorderLayout.NORTH); // 北部
3. GridLayout(网格布局)
像表格一样排列:
java
运行
// 3行2列
frame.setLayout(new GridLayout(3, 2));
4. GridBagLayout(最灵活)
复杂界面首选,可自由控制大小位置。
六、事件处理(点击按钮做动作)
Swing 核心:用户操作 → 触发事件 → 执行代码
最常用:按钮点击事件(ActionListener)
示例:点击按钮弹出提示框
java
运行
btn.addActionListener(e -> {
JOptionPane.showMessageDialog(frame, "按钮被点击啦!");
});
登录功能示例(获取输入框内容)
java
运行
btnLogin.addActionListener(e -> {
// 获取用户名和密码
String username = tfUser.getText();
String password = new String(pfPwd.getPassword());

if("admin".equals(username) && "123456".equals(password)){
JOptionPane.showMessageDialog(frame, "登录成功!");
}else{
JOptionPane.showMessageDialog(frame, "用户名或密码错误");
}
});
七、实战案例:登录界面
这是最经典的 Swing 实战案例,直接复制运行:
java
运行
import javax.swing.*;
import java.awt.*;

public class LoginFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("用户登录");
frame.setSize(350, 220);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null); // 窗口居中

// 创建面板,使用网格布局
JPanel panel = new JPanel(new GridLayout(3, 2, 10, 10));
panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

// 添加组件
panel.add(new JLabel("用户名:"));
JTextField tfUser = new JTextField();
panel.add(tfUser);

panel.add(new JLabel("密 码:"));
JPasswordField pfPwd = new JPasswordField();
panel.add(pfPwd);

JButton btnReset = new JButton("重置");
JButton btnLogin = new JButton("登录");
panel.add(btnReset);
panel.add(btnLogin);

frame.add(panel);

// 登录事件
btnLogin.addActionListener(e -> {
String user = tfUser.getText();
String pwd = new String(pfPwd.getPassword());
if ("admin".equals(user) && "123456".equals(pwd)) {
JOptionPane.showMessageDialog(frame, "登录成功!");
} else {
JOptionPane.showMessageDialog(frame, "账号或密码错误");
}
});

// 重置事件
btnReset.addActionListener(e -> {
tfUser.setText("");
pfPwd.setText("");
});

frame.setVisible(true);
});
}
}
八、Swing 开发小技巧
窗口居中:frame.setLocationRelativeTo(null);
禁止缩放窗口:frame.setResizable(false);
设置图标:frame.setIconImage(new ImageIcon("logo.png").getImage());
弹出对话框:
提示:JOptionPane.showMessageDialog()
确认:JOptionPane.showConfirmDialog()
输入:JOptionPane.showInputDialog()
给组件加边距:setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

http://www.zskr.cn/news/1498817.html

相关文章:

  • 广州闲置名包出手,认准这家口碑优质回收门店 - 开心测评
  • 别再被旧教程坑了!InVEST 3.10.2新版生境质量模块保姆级配置指南(附正确表格模板)
  • 手机安装Appium Settings后闪退-最简单解决方式
  • 告别手动启动!为Cadence SPB17.4写一个简单的License服务守护脚本(Python/批处理)
  • 四旋翼飞控开发避坑指南:从建模误差到实际调试的5个关键点
  • 数据科学新手避坑指南:从Excel到AI的72小时实战路径
  • SpringBoot+Vue高校学生实习综合服务平台源码+论文
  • 告别玄学!用Multisim/ADS手把手仿真SI信号完整性与PI电源噪声(从理论到波形)
  • 从工地安全帽到H5视频通话:一个uni-app + WebRTC项目的踩坑与填坑实录
  • 告别地图偏差:手把手教你用Python实现兰勃特投影正反变换(附WGS-84椭球参数)
  • 别再被‘无效编译器’劝退!Code::Blocks 20.03 + MinGW 完整配置保姆级教程
  • 从像素块到矢量多边形:我是如何用‘对抗形状学习’搞定航拍图中模糊建筑边界的
  • 杭州 K 金与足金回收解析 金价走低教你合理处置闲置金饰 - 奢侈品回收评测
  • 别再手动合并了!Excel高手都在用的数组公式,5分钟搞定两列数据去重合并
  • ReAct模式:让AI边思考边行动的智能体工作流
  • 别再为python-docx读取字体返回None发愁了,这份实战避坑指南帮你搞定
  • 2026年6月濮阳本地黄金铂金白银金条回收靠谱门店 TOP5 榜单+实体老店联系方式 + 详细地址 - 中业金奢再生回收中心
  • 多模态讽刺检测技术:GDCNet的创新与应用
  • Databricks社区版升级付费版:AWS云环境部署与生产就绪指南
  • 奉贤区全屋定制工厂怎么选?2026年上海本地直营避坑指南与官方对接渠道 - 优质企业观察收录
  • 探秘职坐标:AI+教育的实力之选 - 品牌测评鉴赏家
  • 2026湖州贵金属旧料回收优质门店排行 TOP5 黄金白银铂金金条回收正规老店实地走访整理 - 信誉隆金银铂奢回收
  • 2026 年 6 月重磅推荐 | 卡地亚官方售后网点实地考察与验证报告(含迁址新开) - 亨得利官方维修中心
  • 手表长期佩戴导致漆面老化,北京浪琴表盘字符褪色故障科普,盘点维修误区和日常养护要点 - 亨得利官方维修中心
  • 别再只用循环了!用Python的zip和yield函数优雅生成杨辉三角(附性能对比)
  • 保姆级图解:从TMDS差分信号到EDID读取,彻底搞懂HDMI线里到底跑了啥
  • 2026 成都各区包包回收指南,实体店地址与报价全面整理 - 开心测评
  • 从驱动兼容到连接测试:一次搞定SpringBoot与国产GBase数据库的整合实战
  • 2026年6月湖州本地黄金铂金白银金条回收靠谱门店 TOP5 榜单+实体老店联系方式 + 详细地址 - 中业金奢再生回收中心
  • 2026吉安贵金属旧料回收优质门店排行 TOP5 黄金白银铂金金条回收正规老店实地走访整理 - 信誉隆金银铂奢回收