在Swing应用程序中组织操作?

我当前的应用程序有一个JFrame,其中大约有15个操作存储为JFrame中的字段。 每个动作都是一个匿名类,其中一些很长。

在一个名为actions的子包中,将操作分解为自己的类是否常见?

如果没有,这种复杂性通常如何被驯服?

谢谢

如果你的行为可以重复使用(例如,从键盘快捷键,其他菜单,其他对话框等),特别是如果它们可以直接在底层模型上工作(而不是在UI上),那么它通常会更好不要将它们作为匿名类。

而是创建一个单独的包,并为每个包创建类。

通常,不直接实例化这些也是有意义的,而是有某种管理器定义常量并初始化并返回操作集,以便您可以,例如,在不同版本提供不同的操作集或仅设置某些操作内部版本。

最后,检查您的操作是否可以重构为类层次结构。 它们通常可以保存代码复制,还可以帮助您添加健壮性(例如,在执行操作之前检查某些条件)。

这通常是我如何做到的。 每个动作都有它自己的类,它引用了“app”对象,因此它可以获得所需的资源。 我通常有一个动作管理器,它可以保存所有动作,因此有一个地方可以访问它们,还有一个地方可以更新它们的启用和内容。

最终这也变得难以管理,此时你应该开始考虑使用Eclipse RCP,NetBeans框架,JIDE等应用程序框架。如果你想支持用户定义的键盘映射和类似的东西,尤其如此。

我所做的是为动作类创建一个包(实际上是包树),然后根据上下文实例化每个类。 几乎所有的动作类都是抽象的抽象方法来获取上下文(ala Spring)。

public abstract class CalcAndShowAction extends AbstractAction { //initialization code - setup icons, label, key shortcuts but not context. public void actionPerformed(ActionEvent e) { //abstract method since it needs ui context String data = getDataToCalc(); //the actual action - implemented in this class, // along with any user interaction inherent to this action String result = calc(data); //abstract method since it needs ui context putResultInUI(result); } //abstract methods, static helpers, etc... } //actual usage //... button.setAction(new CalcAndShowAction() { String getDataToCalc() { return textField.getText(); } void putResultInUI(String result) { textField.setText(result); } }); //... 

(对不起任何错误,我在这个文本框中手写,而不是在IDE中)。