java JCheckBox设置其他类中的值
你好,我有类似的东西
public class GUI{
public JCheckBox box;
public boolean value;
void init(){
box.addActionListener(new BoxListener(this));
}
}
public class BoxListener implements ActionListener{
GUI gui;
public BoxListener(GUI gui){
this.gui = gui;
}
@override
public void actionperformed(ActionEvent a){
gui.value = true;
}
}
现在我想在单击复选框时更改bool的值。 我正在寻找更好的解决方案,而不是将类GUI作为自编侦听器的输入参数
有没有更好的解决办法
# 1 楼答案
我们为什么不把你的东西稍微修改一下呢:
首先,创建一个控制器(
DefaultController
)类,该类将处理初始化应用程序并保存对GUI的引用(或视图)接下来,修改
GUI
类以包含与JCheckBox
交互的方法,并注册一个侦听器:现在
BoxListener
有了视图的实例(GUI
),可以通过提供的接口调用来设置复选框的值。您不再直接访问box
成员变量(封装)。这将允许您在不影响调用者的情况下对setBoxValue
方法进行更改在你的
BoxListener
课上:注:
view
是BoxListener
-private GUI view;
的成员变量# 2 楼答案
我会加入一些MVC,这需要做更多的工作,但它有助于更灵活的编码
首先是一个
ModelBean
和一个boolean checked
和propertyChangeSupport
用于触发属性更改事件然后你就有了主
GUI
类,它将ModelBean
作为参数而您
ItemListener
类,它将相同的ModelBean
作为参数,并将PropertyChangeListener
添加到model
然后你去运行这个程序
对于一个愚蠢的
boolean
来说,这似乎是一个很大的工作,但这个概念是一个更好的整体设计,适用于需要操纵和听取大量不同数据以进行更改的大型程序更新
另一个选项是,如果您的GUI是父容器,并且您不想通过引用传递来公开它,那么您可以创建一个
interface
并让GUI
实现它然后可以将,而是使用接口
GUI
传递给侦听器。虽然它看起来和你已经在做的事情一样,但实际上它并不是,因为它不再公开^{