我做了一个基于GUI的大应用程序,我现在有很多Action
个东西......
我有Listeneres
,ActionListener
,KeyAdapters
,...
一切都应该运行线程,所以我的GUI在长时间操作时不会冻结。所以我在每个SwingWorker
使用ActionListener
...
目前它的工作方式如下:我有JComponents
,绑定在一个ActionListener
上。在此Listener
中,我根据actionCommand()
决定要做什么。我调用了一个方法,其中包含我应该执行的SwingWorker
和Action
。
我不再喜欢这个概念,因为我的课程越来越长,而且我对所有功能都没有概述。所以我决定以另一种方式做到......
我认为工厂方法会很棒,但这是我的问题:我有时需要来自GUI的数据,例如:按JButton
x时,JTextField
y中的内容等等。 ..
那么最佳做法是什么?我应该给我的工厂一个完整的GUI实例吗?或ArrayList
Components
?另一个问题是需要从我的GUI更改值,例如:按下按钮x然后过滤JTable
...我该怎么做?
这样做this = myFactory.process(this);
并不是我想要的......
答案 0 :(得分:2)
看一下 JGoodies Binding :它强调使用PM( PresentationModel ),其中存储了所有GUI状态(并绑定到实际的GUI组件)。
每个查看都有一个关联的PM,它与域模型建立链接。 PM可以在没有View的情况下生存(但事实并非如此)。
PM不应该有任何与GUI相关的依赖(因此它可以在没有GUI的情况下进行单元测试),因此没有引用JTextField,JButton ......
但是,PM通常包含附加在查看按钮上的Action
个。操作不是实际的GUI组件(尽管它们属于javax.swing
包。
我说“通常”因为某些操作可能需要显示一个消息框,打开一个新窗口......然后应该将这种操作放在另一个类中。请注意,Karsten Lentzsch(JGoodies作者)在他的演讲中没有谈论这个案例(这是我自己处理这个案子的方式)。