Java AWT / SWT / Swing:如何计划GUI?

演出人数:

我已经实现了一些带有小型图形用户界面的应用程序。没什么复杂的,但是我遇到了一些问题,这些问题导致组件无法显示或无法正常运行。

现在我的问题是:

您如何计划这些用户界面?当您需要进行更改时该怎么办?您如何调试奇怪的行为?

这几乎适用于所有类型的GUI设计。当然,使用Microsoft Visual Studio具有很大的优势,因为您几乎获得了在设计器中看到的东西。

是否存在优秀的AWT开源设计器?已经环顾四周,没有发现任何真正聪明的东西。

编辑:到目前为止,我还手动创建了所有GUI。当然,这是更简洁的代码,但有时很难找到布局错误。如果Visual Studio by MS能够创建大致干净的代码,那么其他人为什么不呢?

我听说过一些Eclipse Visual设计器。那个已经准备好生产了吗?

亚当斯基:

我不是GUI建设者的忠实拥护者:他们通常会自动生成大量的代码,然后将您的整个开发团队锁定为使用一个IDE。而且,此代码通常不可读(请检查在Netbeans下使用Matisse时生成的代码)。

我对GUI设计/调试的建议是:

  • main在每个面板(或“顶级”组件)实现中添加一个方法,使其他开发人员可以轻松确定组件的外观。
  • 赞成使用Actions over ActionListeners并在每个JComponents中注册这些动作ActionMap这允许它们被“提取”并添加到UI的其他部分(例如JToolBar),同时它们的状态仍由“所有权” JComponent(即松散耦合)控制。
  • 使用assert来确保所有UI组件修改都在Event Dispatch线程上进行;例如assert SwingUtilities.isEventDispatchThread()
  • 要调试奇怪的布局行为,请考虑将组件的背景涂成红色!
  • 集中捕获和报告工作流事件和异常。例如,我通常实现一个TaskManager在UI的状态栏中注册类。任何后台处理(在SwingWorkers 内执行)都会通过传递给Task创建的句柄TaskManager与工作Interracting(通过调用setDescription(String)setThrowable(Throwable)cancel())导致要更新的状态栏。这也将导致玻璃窗格显示为“全局”任务...但是,所有窗格都与单个SwingWorkers分离/隐藏了。
  • 不要使用Observer/ Observable班,而是青睐ChangeListenerPropertyChangeListener或传播事件自己定制的监听器实现。Observer传递一个Objectas事件,迫使客户端代码使用instanceof检查类型并执行向下转换,使代码不可读,并使类之间的关系不那么清楚。
  • 即使在表只有一列的情况下,也建议使用JTableover JListJList它的API中有一些讨厌的功能,包括您需要为其提供原型值以正确计算其大小这一事实。
  • 永远不要使用DefaultTableModel它,因为它通常会导致您将“模型”数据存储在两个位置:在实际的业务对象中以及位于2D数组中DefaultTableModel相反,只需子类AbstractTableModel-这很容易做到,并且意味着您的实现可以简单地委派给List存储您的数据的数据结构(例如)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章