swing推荐使用swingutilities.invokelater是因为所有ui操作必须在事件调度线程(edt)上执行,1. 直接在主线程操作ui可能导致线程安全问题、界面卡顿或无响应;2. invokelater将ui任务提交到edt队列中,确保串行安全执行;3. 该方法是启动swing应用和更新ui的最佳实践,但仅在非edt线程中需要使用,在edt内部(如事件监听)则无需调用。

Java Swing创建图形界面,核心在于组合各种UI组件(如
JFrame
JPanel
JButton
JLabel
要用Java Swing搭建一个最简单的图形界面,我们通常会从
JFrame
JPanel
来看一个基础到不能再基础的例子,一个带按钮和文本标签的窗口:
立即学习“Java免费学习笔记(深入)”;
import javax.swing.*; // 引入Swing组件
import java.awt.*; // 引入AWT中的布局管理器和事件处理
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SimpleSwingApp {
public static void main(String[] args) {
// 这是Swing应用的关键一步:所有UI更新都应该在事件调度线程(EDT)上进行。
// SwingUtilities.invokeLater确保我们的GUI代码在EDT上运行。
SwingUtilities.invokeLater(() -> {
createAndShowGUI();
});
}
private static void createAndShowGUI() {
// 1. 创建主窗口 (JFrame)
JFrame frame = new JFrame("我的第一个Swing窗口");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作,点击X时退出程序
frame.setSize(400, 300); // 设置窗口大小
// 2. 创建一个面板 (JPanel) 来容纳其他组件
// 我个人习惯用JPanel来做组件的分组和布局管理,感觉更清晰。
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout()); // 使用流式布局,组件会从左到右、从上到下排列
// 3. 创建一个标签 (JLabel)
JLabel label = new JLabel("你好,Swing!");
panel.add(label); // 将标签添加到面板
// 4. 创建一个按钮 (JButton)
JButton button = new JButton("点我!");
// 给按钮添加一个动作监听器,这样点击按钮时会有反应
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 当按钮被点击时,更新标签的文本
label.setText("按钮被点击了!");
System.out.println("按钮被点击了!"); // 也可以在控制台输出
}
});
panel.add(button); // 将按钮添加到面板
// 5. 将面板添加到窗口
frame.add(panel);
// 6. 让窗口可见
frame.setVisible(true);
// 7. 居中显示窗口 (可选,但体验更好)
frame.setLocationRelativeTo(null);
}
}这段代码运行起来,你会看到一个标题为“我的第一个Swing窗口”的窗口,里面有一个“你好,Swing!”的标签和一个“点我!”的按钮。当你点击按钮时,标签的文字会变成“按钮被点击了!”,同时控制台也会有相应的输出。这就是Swing界面开发最基本的骨架。
SwingUtilities.invokeLater
说实话,刚接触Swing时,我经常会忽略
SwingUtilities.invokeLater
简单来说,Swing的所有UI操作,包括组件的创建、修改、事件处理等等,都必须在这个EDT上进行。你可以把EDT想象成一个专门负责处理用户界面事件和更新界面的“工人”。如果你的代码直接在主线程(或者其他非EDT线程)上创建或修改UI组件,就相当于有多个工人在同时操作同一个界面,这很容易导致线程安全问题,比如界面错乱、组件状态不一致,甚至直接抛出异常。更常见的是,界面会变得无响应,因为主线程可能被一些耗时操作阻塞了,而EDT却没有机会去处理界面事件。
SwingUtilities.invokeLater
invokeLater
actionPerformed
actionPerformed
布局管理在Swing里是个挺有意思的话题,它决定了你的组件在窗口里怎么“排排坐”。我个人觉得,布局管理器是Swing开发中一个既能让你省心又能让你抓狂的地方。如果你不使用布局管理器,而是尝试手动设置每个组件的绝对位置(
setBounds
Swing提供了几种内置的布局管理器,它们各有特点,适用于不同的场景:
FlowLayout
BorderLayout
NORTH
SOUTH
EAST
WEST
CENTER
GridLayout
BoxLayout
FlowLayout
GridBagLayout
选择哪个布局管理器,完全取决于你的界面设计需求。有时候,我会把多个
JPanel
JPanel
这是一个很有趣的问题,尤其对于想进入Java桌面应用开发领域的人来说。Swing和JavaFX都是Java用来构建桌面应用的UI工具包,但它们代表了不同的时代和设计理念。
Swing的优势与适用场景:
我个人觉得,Swing更适合以下场景:
JavaFX的优势与适用场景:
JavaFX在我看来更适合以下场景:
总的来说,Swing就像一位经验丰富的老兵,稳定可靠,但可能略显“朴素”;而JavaFX则是一位充满活力的新生代,拥有更时尚的装备和更广阔的视野。在选择时,我会根据项目的具体需求、团队的技术栈以及对UI美观度的追求来做决定。
以上就是java如何使用Swing创建简单的图形界面 javaSwing图形界面开发的入门教程的详细内容,更多请关注php中文网其它相关文章!
Windows激活工具是正版认证的激活工具,永久激活,一键解决windows许可证即将过期。可激活win7系统、win8.1系统、win10系统、win11系统。下载后先看完视频激活教程,再进行操作,100%激活成功。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号