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