在对该问题进行预研究时,我发现Internet上没有太多组织良好的有关Java Swing最佳实践的信息。因此,我想我将为Stack Exchange打造一个“伟大清单”提供帮助。
Java Swing开发的最佳实践是什么?您发现什么对您有用,为什么?
在对该问题进行预研究时,我发现Internet上没有太多组织良好的有关Java Swing最佳实践的信息。因此,我想我将为Stack Exchange打造一个“伟大清单”提供帮助。
Java Swing开发的最佳实践是什么?您发现什么对您有用,为什么?
Answers:
我只能回答对我有用的东西。其他评论者指出,Java GUI通常会落入不十分原生的外观和感觉的“怪异谷”中,我对此并不提出异议。
充分利用Action API。它使您可以更好地封装用户将执行的不同操作,并允许您更轻松地将它们连接到快捷方式,加速键,按钮和其他输入对象。
使用适当的布局管理器。GridBagLayout非常强大,但是我要说的是,如果没有过多的注释,它是无法维护的。当我在我维护的较旧的GUI应用程序上运行诸如Sonar之类的静态代码分析工具时,它总是指出大量的幻数,以使GridBags布局正确。我在GroupLayout上取得了很多成功,它避免了必须指定像素完美的对齐方式。
如果您认为您需要JDialog ...则可能不需要。就用户体验而言,对话框是可怕的-该应用程序决定将其用于每个菜单和表单,并以奇异的方式强制执行始终在最前面的规则。当我们实际上确实需要在菜单上发出警报时,这变成了维护的噩梦。提示使无法单击的对话框(因此无法取消的对话框)受挫。
在适当的地方使用SwingWorker而不是滚动自己的多线程。扩展SwingWorker并执行一些长期运行的任务非常容易,同时还可以将定期更新返回给GUI。考虑下载客户端更新。它会为您处理工作线程调度,并让您将下载百分比发布回视图,以便您可以更新ProgressBar或您拥有的东西。
根据我公认的有限经验,这就是我所能建议的。
JDialog
很好-只要您将其用于对话框即可。
JDialog
)。
我要说的第一件事就是不要直接对其进行处理。Swing(IMHO)中的布局系统非常糟糕,而试图从中使用任何实质性的应用程序都是一场噩梦。
我使用的许多替代布局管理器中的两个是MigLayout和MultiSplitPane布局。MigLayout是更通用的用途,它使您可以以简单,理智的方式想到的任何布局。MultiSplitPane更具体;我用它为GUI制作了一些简单的布局,这些布局没有太多复杂性。
编辑:这不能代替swing。如果必须使用Swing,您仍然可以使用这些布局管理器,因为它们仅管理Swing,而不是替换它。
当然,更好的选择是不使用Swing。Swing令人敬畏,因为它使用起来很恐怖,看上去并不原生,而且运行缓慢。存在许多替代方案,它们从中学到了不该做的事情,例如Qt,SWT,甚至我认为是GTK。这些是解决Swing头痛的长期解决方案
编辑:正如@Torgamus勋爵所说,如果您被迫使用Swing,这些功能实际上将不可用。如果您打算在创建项目时使用这些最佳解决方案,而不是3/4或选择遗留应用程序时这样做。
我还想指出,大多数替代GUI都使用本机库,因此看起来像操作系统,然后又退回到Swing或其他一些Pure Java GUI。