java - 代码是否应该由 EDT(事件调度线程)执行之间的混淆?

标签 java user-interface swing refactoring

我开发了一个包含 12 个 JPanel 的 Swing GUI。最初,所有 JPanel 的代码都写在主要的 JFrame 类代码中。结果,代码变得太长(10,000 多行)。

现在我想重构代码,将代码分成 13 个类(每个 JPanel 有 12 个类,主 JFrame 有 1 个类)而不是 1 个类携带所有代码。

但是我有一些困惑如下:

  1. 最初,这 12 个 JPanel 设置在“Card”JPanel 上,“Card”JPanel 的布局设置为 CardLayout 以便在这 12 个 JPanel 中只有 1 个 JPanel 根据用户点击的按钮一次显示。现在,当我从 MainJForm 中分离出这 12 个 JPanel 并将它们中的每一个实现到它自己的类中时,我想我需要实例化一个相应的 JPanel 每当用户点击按钮时。那么,在 EDT(Event Dispath Thread)上完成这项繁重的任务会更好吗?如果否,那么是否可以在 SwingWorker 线程中创建 JPanel 的实例并传递一个 ref。到美国东部时间?

最佳答案

您可以按照与它们都在一个类中时完全相同的方式来实例化您的面板。因此,如果之前的实现在帧实例化时创建了所有对象,您可以同样地实例化您的 12 个面板对象。如果在单击按钮时面板显示时已完成此操作,请以相同的方式执行此操作。

在这种情况下,代码放置的问题应该不会对问题的执行产生影响,至少只要之前没有问题(当点击按钮切换面板时 ui 挂起)。

当然,您可以先创建最初显示的面板,然后使用 swingworker 创建其他面板,以便第一个立即显示,而其他面板在单击按钮后立即可用,而无需实例化它们第一的。只需确保在 EDT 中小心放置更改当前显示的 UI(例如将实例化面板添加到框架)的调用即可。

关于java - 代码是否应该由 EDT(事件调度线程)执行之间的混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123076/

相关文章:

java - 不要重新绘制或重新验证

java - JTable 行总计颜色编码标签

java - 使用未正确解析的 DateFormat 将字符串解析为日期

android - 复选框和其他组件中的辅助文本?

java - 创建基于 GUI 的计时器(或秒表)

java - 第一次绘制时图形上下文未对齐

java - 如何更换战斧 <t :saveState> and <t:dataList> tags with standard JSF tags?

java - 程序在Eclipse中运行,不在命令行中运行

Java:具有填充形状的线条描边

css - 您如何为网站使用调色板?