Java GUI(图形用户界面)编程是开发跨平台桌面应用的重要技术。Swing 是 Java 提供的高级 GUI 工具包,可以构建结构清晰、功能丰富的桌面应用程序。
本篇将带你从 Swing 基础组件讲起,逐步实现一个具备窗口、按钮、输入框、事件响应的桌面程序。
Swing 是 Java 提供的 GUI 工具包,位于 javax.swing
包中,常见组件包括:
组件 | 说明 |
---|---|
JFrame | 主窗口 |
JPanel | 面板容器 |
JButton | 按钮 |
JLabel | 标签文本 |
JTextField | 单行文本输入框 |
JTextArea | 多行文本输入框 |
JCheckBox | 复选框 |
JRadioButton | 单选框 |
lua复制编辑+-------------------------------+
| JFrame 窗口 |
| +-------------------------+ |
| | JPanel 面板 | |
| | Label TextField Button | |
| +-------------------------+ |
+-------------------------------+
java复制编辑import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("我的第一个窗口");
JLabel label = new JLabel("欢迎使用 Java Swing!");
frame.add(label); // 添加标签
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
🖼️(窗口中居中显示一段文字)
java复制编辑import javax.swing.*;
import java.awt.event.*;
public class ButtonExample {
public static void main(String[] args) {
JFrame frame = new JFrame("按钮示例");
JButton button = new JButton("点击我");
JLabel label = new JLabel("等待点击...");
button.addActionListener(e -> label.setText("按钮已点击"));
JPanel panel = new JPanel();
panel.add(button);
panel.add(label);
frame.add(panel);
frame.setSize(300, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
🖼️ 图示:按钮 + 标签点击后变更内容
组件从左到右排列,超出换行:
java复制编辑frame.setLayout(new FlowLayout());
java复制编辑frame.setLayout(new BorderLayout());
frame.add(button, BorderLayout.SOUTH);
java复制编辑frame.setLayout(new GridLayout(2, 2)); // 两行两列
🖼️ 图示:按钮在南边、输入框在中部、布局均匀分布
我们来实现一个带有“用户名 + 密码 + 登录按钮”的简易登录界面。
java复制编辑import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginForm {
public static void main(String[] args) {
JFrame frame = new JFrame("登录窗口");
JLabel userLabel = new JLabel("用户名:");
JTextField userText = new JTextField(15);
JLabel passLabel = new JLabel("密码:");
JPasswordField passText = new JPasswordField(15);
JButton loginButton = new JButton("登录");
JLabel resultLabel = new JLabel("");
loginButton.addActionListener(e -> {
String user = userText.getText();
String pass = new String(passText.getPassword());
if ("admin".equals(user) && "1234".equals(pass)) {
resultLabel.setText("登录成功!");
} else {
resultLabel.setText("用户名或密码错误");
}
});
JPanel panel = new JPanel(new GridLayout(4, 2));
panel.add(userLabel);
panel.add(userText);
panel.add(passLabel);
panel.add(passText);
panel.add(new JLabel()); // 空白
panel.add(loginButton);
panel.add(new JLabel());
panel.add(resultLabel);
frame.add(panel);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
🖼️ 图示:用户输入框 + 密码框 + 登录按钮 + 登录结果提示
java复制编辑ImageIcon icon = new ImageIcon("icon.png");
frame.setIconImage(icon.getImage());
java复制编辑UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
JTable
管理数据表格
SwingWorker
实现后台线程处理
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。