gpt4 book ai didi

Java AWT/SWT/Swing : How to plan a GUI?

转载 作者:IT老高 更新时间:2023-10-28 21:13:31 24 4
gpt4 key购买 nike

我已经实现了一些带有小型图形用户界面的应用程序。没什么复杂的,但我遇到了几个问题,即组件未显示或行为不符合预期。

现在我的问题:

您如何规划这些用户界面?当你需要做出改变时,你会怎么做?你如何调试奇怪的行为?!

这适用于几乎所有类型的 gui 设计。当然,使用 Microsoft 的 Visual Studio,您有很大的优势,因为您几乎可以得到您在设计器中看到的内容。

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

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

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

最佳答案

我不是 GUI 构建器的忠实拥护者:它们通常会自动生成大量代码,然后将整个开发团队锁定为使用一个 IDE。另外,这段代码通常不可读(查看 Netbeans 下使用 Matisse 时生成的代码)。

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

  • 为每个面板(或“顶级”组件)实现添加 main 方法,使其他开发人员可以轻松确定组件的外观。
  • 倾向于使用 Actions 而不是 ActionListeners 并将这些操作注册到每个 JComponentActionMap .这允许它们被“提取”并添加到 UI 的其他部分(例如 JToolBar),同时它们的状态仍然由“拥有”JComponent 控制(即松散耦合)。
  • 使用 assert 确保所有 UI 组件修改都发生在 Event Dispatch 线程上;例如断言 SwingUtilities.isEventDispatchThread().
  • 要调试奇怪的布局行为,请考虑将组件的背景绘制为红色!
  • 集中捕获和报告工作流事件和异常。例如,我通常实现一个注册到我的 UI 状态栏的 TaskManager 类。任何后台处理(在 SwingWorkers 中执行)都会被传递给由 TaskManager 创建的 Task 的句柄。与任务交互(通过调用 setDescription(String)setThrowable(Throwable)cancel())会导致状态栏被更新。它还导致为“全局”任务显示玻璃 Pane ......但这一切都与单个 SwingWorker 分离/隐藏。
  • 不要使用 Observer/Observable 类,而是使用 ChangeListenerPropertyChangeListener 或您自己的自定义用于传播事件的监听器实现。 Observer 传递一个 Object 作为它的事件,强制客户端代码使用 instanceof 检查类型并执行向下转换,使代码不可读并且使类之间的关系不太清晰。
  • 赞成使用 JTable 而不是 JList,即使在表只有一列的情况下也是如此。 JList 在其 API 中有一些令人讨厌的特性,包括您需要为其提供原型(prototype)值才能正确计算其大小。
  • 永远不要使用 DefaultTableModel,因为它通常会导致您将“模型”数据存储在两个地方:在您的实际业务对象中以及在 DefaultTableModel 所在的二维数组中上。相反,只需将 AbstractTableModel 子类化 - 这非常容易这样做,这意味着您的实现可以简单地委托(delegate)给数据结构(例如 List)存储您的数据。

关于Java AWT/SWT/Swing : How to plan a GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com