Java AWTSWTSwing:如何计划GUI?

Java AWTSWTSwing:如何计划GUI?,第1张

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

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

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

  • main
    在每个面板(或“顶级”组件)实现中添加一个方法,使其他开发人员可以轻松确定组件的外观。
  • 赞成使用
    Action
    s over
    ActionListener
    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
    over
    JList
    JList
    它的API中有一些讨厌的功能,包括您需要为其提供原型值以正确计算其大小这一事实。
  • 永远不要使用
    DefaultTableModel
    它,因为它通常会导致您将“模型”数据存储在两个位置:在实际的业务对象中以及位于2D数组中
    DefaultTableModel
    。相反,只需子类
    AbstractTableModel
    -这 很容易 做到,并且意味着您的实现可以简单地委派给
    List
    存储您的数据的数据结构(例如)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5560583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存