摇摆的GUI指南

Car*_*nco 10 java user-interface swing

是否有解释摇摆的GUI设计的资源?像最佳实践等.

chu*_*ubs 35

设计指南并没有完全遵循,因为Swing可以在很多不同的平台上运行.很久以前Sun写了一些,但从未改变它们,所以如果你觉得它会有所帮助我会说它.这里有一些关于做摇摆发展的实用知识.

  • 永远不要使用GridBagLayout.抓住TableLayout.它从根本上简化了Swing UI的布局.GridBagLayout是魔鬼.
  • 不要过度嵌入组件只是为了获得正确的布局(即嵌入式BoxLayout等).有关如何执行此操作,请参阅第1点.屏幕上有组件存在性能问题.
  • 沿着MVC线分离您的程序.Swing具有视图和模型分离,但在大型程序中,View(即Swing组件的子类)变成了伪视图/控制器,只会使复杂和维护变得复杂.它快速变成了意大利面条代码.打破习惯并创建一个不扩展Swing的Controller类.同样适用于模型(无摆动).Controller实例化高级视图类,并将自身连接为视图的侦听器.
  • 仅使用简单面板简化弹出对话框.不要继承JDialog.创建一个可重用的对话框类,它包装了一个可以像JOptionPane这样使用的面板.您的面板不会仅限于对话框,可以重复使用.当你以这种方式工作时,这很容易.
  • 避免使用actionlistener /命令.这是旧垃圾,不是很可重复使用.使用AbstractAction(anon类是你的选择,我没有问题).AbstractAction封装了文本,图标,mneumonics,加速器,可重复使用的按钮,弹出窗口,菜单,手柄切换启用/禁用状态,可以在多个组件之间共享,它也是InputMap/ActionMaps将键盘笔划映射到动作的基础.ActionMaps为您提供重复使用的电力.
  • 最好必须向控制器查看调度事件.我不是在谈论鼠标/键盘垃圾,而是高级事件.像NewUserEvent,AddUserEvent,DeleteUserEvent等.让您的控制器监听这些高级业务事件.这将通过保持与应用程序流分离的视图(我应该使用表,列表,树或其他什么?)的关注点来促进封装.控制器不关心用户是否单击了按钮,菜单或复选框.
  • 事件不仅仅适用于Controller.Swing是事件编程.您的模型将在SwingThread或后台执行操作.将事件调度回控制器是一种非常简单的方法,可以让它响应模型层中可能正在使用线程进行工作的事情.
  • 了解Swing的线程规则!你很惊讶很少有人真正理解Swing是单线程的,这对多线程应用程序意味着什么.
  • 了解SwingUtilities.invokeLater()的作用.
  • 永远不要使用SwingUtilities.invokeAndWait().你这样做是错的.不要在事件编程中尝试编写同步代码.(*有一些极端情况可以接受invokeAndWait(),但99%的情况下你不需要invokeAndWait()).
  • 如果你从头开始一个新项目跳过Swing.它已经过时了,它已经结束了.Sun从来没有像服务器那样真正关心客户端.Swing一直保持不佳,自首次撰写以来没有取得多大进展.JavaFX还没有出现,并且遭受了很多Swing的祸害.我想看看Apache Pivot.大量新想法和更好的设计以及活跃的社区.

  • 好点,但我不同意一些意见.1. GridBagLayout不是恶魔.魔鬼是在不必要的时候使用的.这是复杂的布局,是真的,但效果很好.2. AbstractAction很棒 - 但它对ui中每个动作组件的使用很快就会导致难以维护的混乱.所以我建议两种方法的结合.AbstractAction用于将重用的代码,ActionListener用于本地使用. (3认同)

Ada*_*ski 5

在这里写了一份建议清单.


sta*_*ker 5

在较大的摇摆项目中,我像这样分享应用程序:

  • 每个GUI元素都有一个类,如JPanel,JDialog等.

  • 为每个屏幕使用单独的包,特别是如果您必须实现自定义的TableModel或其他复杂的数据结构

  • 不要使用匿名和内部类,而是实现ActionListener,并在那里检查ActionEvent.getActionCommand().

编辑:如果您正在寻找教程或介绍,您可以从这里开始


cam*_*ckr 5

也许不完全是你想要的,但是看看Java外观和感觉设计指南并不会有什么坏处