小编典典

挥杆的GUI准则

java

有没有资源可以解释用于秋千的GUI设计?像这样的最佳做法。


阅读 224

收藏
2020-10-18

共1个答案

小编典典

由于Swing在许多不同的平台上工作,因此不再严格遵循设计准则。Sun很久以前就写过文章,但从未更改过,因此,如果您认为有帮助,我想读一读。这是一些有关进行秋千开发的实用知识。

  • 切勿使用GridBagLayout。抓取TableLayout。它从根本上简化了Swing UI的布局。GridBagLayout是魔鬼。
  • 不要为了获得正确的布局而过度嵌入组件(即嵌入式BoxLayout等)。有关方法,请参见第1点。屏幕上有组件会导致性能问题。
  • 沿MVC行分隔程序。Swing具有视图和模型分离的功能,但是在大型程序中,视图(即,Swing组件的子类)变成了伪视图/控制器,这只会使事情变得难以重用和维护。它很快就变成了意大利面条代码。打破习惯,创建一个不扩展Swing的Controller类。模型也一样(不摆动)。控制器实例化高级视图类,并将自身连接为视图的侦听器。
  • 仅使用简单面板简化弹出对话框。不要继承JDialog。创建一个可重用的对话框类,该类包装可用于JOptionPane之类的面板。您的面板将不仅限于对话框,还可以重复使用。这样工作非常简单。
  • 避免使用动作侦听器/命令。这是旧的垃圾,不是很可重用。使用AbstractAction(匿名类是您的选择,我对它们没有问题)。AbstractAction封装了文本,图标,气动,加速器,可在按钮,弹出窗口,菜单中重用,可以切换启用/禁用状态的句柄,可以在多个组件之间共享,它也是InputMap / ActionMaps用来将键盘笔触映射到动作的基础。ActionMap为您提供了重用的力量。
  • 最好必须查看到控制器的调度事件。我不是在谈论鼠标/键盘垃圾,而是高级事件。像NewUserEvent,AddUserEvent,DeleteUserEvent等。让您的控制器侦听这些高级业务事件。通过将视图的关注点(我应该使用表,列表,树还是其他东西)与应用程序流分开,将促进封装。控制器不在乎用户是否单击了按钮,菜单或复选框。
  • 事件不仅仅针对Controller。Swing是事件编程。您的模型将在SwingThread之外或在后台运行。将事件调度回控制器是一种非常简单的方法,可以使事件响应可能在使用线程完成工作的模型层中发生的事情。
  • 了解Swing的线程规则!您会惊讶地发现,很少有人真正了解Swing是单线程的,这对多线程应用程序意味着什么。
  • 了解SwingUtilities.invokeLater()的作用。
  • 从不曾经使用SwingUtilities.invokeAndWait()。你这样做是错的。不要尝试在事件编程中编写同步代码。(在某些特殊情况下,invokeAndWait()是可以接受的,但是有99%的时间您不需要invokeAndWait())。
  • 如果要从头开始一个新项目,请跳过Swing。它很旧,已经过去了。Sun从未像服务器那样真正关心客户端。自从最初编写以来,Swing的维护情况一直很差,并且没有取得太大进展。JavaFX尚不存在,并且遭受了许多Swing的过失。我想说说Apache Pivot。许多新想法和更好的设计以及活跃的社区。
2020-10-18