GUI组件ActionListener的最佳实践?

时间:2011-06-22 11:51:58

标签: java swing user-interface awt actionlistener

我做了一个基于GUI的大应用程序,我现在有很多Action个东西...... 我有ListeneresActionListenerKeyAdapters,... 一切都应该运行线程,所以我的GUI在长时间操作时不会冻结。所以我在每个SwingWorker使用ActionListener ... 目前它的工作方式如下:我有JComponents,绑定在一个ActionListener上。在此Listener中,我根据actionCommand()决定要做什么。我调用了一个方法,其中包含我应该执行的SwingWorkerAction

我不再喜欢这个概念,因为我的课程越来越长,而且我对所有功能都没有概述。所以我决定以另一种方式做到...... 我认为工厂方法会很棒,但这是我的问题:我有时需要来自GUI的数据,例如:按JButton x时,JTextField y中的内容等等。 .. 那么最佳做法是什么?我应该给我的工厂一个完整的GUI实例吗?或ArrayList Components?另一个问题是需要从我的GUI更改值,例如:按下按钮x然后过滤JTable ...我该怎么做? 这样做this = myFactory.process(this);并不是我想要的......

1 个答案:

答案 0 :(得分:2)

看一下 JGoodies Binding :它强调使用PM( PresentationModel ),其中存储了所有GUI状态(并绑定到实际的GUI组件)。

每个查看都有一个关联的PM,它与域模型建立链接。 PM可以在没有View的情况下生存(但事实并非如此)。

PM不应该有任何与GUI相关的依赖(因此它可以在没有GUI的情况下进行单元测试),因此没有引用JTextField,JButton ......

但是,PM通常包含附加在查看按钮上的Action个。操作不是实际的GUI组件(尽管它们属于javax.swing包。

我说“通常”因为某些操作可能需要显示一个消息框,打开一个新窗口......然后应该将这种操作放在另一个类中。请注意,Karsten Lentzsch(JGoodies作者)在他的演讲中没有谈论这个案例(这是我自己处理这个案子的方式)。