是否可以从不同的类别设置组合框的选定项目?假设我有A类和B类,在A类中我设置了组合框并将其添加到Jframe中。我可以做类似ClassA.comboBox.setSelectedItem(“Option1”)的事情;从B班?这不起作用,但我希望它说明了我想要做的事情。你知道如何用Java实现这个结果吗?非常感谢。
答案 0 :(得分:4)
这是一个足够普遍的问题,可以通过多种方式解决
将A
的引用传递给B
,因此B
可以调用A
可用的方法来更改其状态。
您应避免允许直接访问您的类字段,因为它允许B
执行您可能不希望它执行的操作。
同样,您应该更倾向于interface
而不是传递实际实施,从而进一步限制B
可以对A
执行的操作。
然而,这会加强代码的耦合。 A
应该提及B
做什么(反之亦然)
使用Observer Pattern,允许B
生成感兴趣方(例如A
)的事件,以便他们可以根据自己的选择,事件和/或自行更新状态B
这解耦了您的代码(B
不再需要A
的实例来执行任何操作)并使您的代码更易于重用,其他类可以注册实例{{1} }和B
并不关心
使用B
。当谈到对象之间的交叉通信时,static
是一个不好的想法。当你有任何一个类的一个实例的那一刻,整个事情就会爆炸成一个可怕的混乱。你也失去了对谁为这些实例做什么的大量控制(没有什么能阻止任何人创建一个类的新实例并将其分配到static
字段),所有这些只会让你的生活变得痛苦(或者对于必须清理它的开发人员来说,你的名字就变成了一个脏话)
答案 1 :(得分:0)
如果你在B中有A的实例,那么更好的选择是在A中为你需要的元素设置getter / setter:
Class A {
private JComboBox comboBox = new JComboBox();
public A(){}
public JCombobox getComboBox(){ return comboBox;}
}
在B:
Class B {
public B(){
A aInstance = new A();
aInstance.getComboBox().setSelectedItem("Option1");
}
答案 2 :(得分:0)
您可以先创建课程B
,然后将参考A
传递给课程B
,然后在课程B
中,您可以通过课程做您想做的事情A
。一个简单的例子:
class A extends JFrame {
private ComboBox comboBox;
public A() {
comboBox = new ComboBox();
B b = new B(this);
}
public void addItem(Obejct item) {
// add item to comboBox
}
}
class B {
private A a;
public B(A a) {
this.a = a;
String item = "new Item";
a.addItem(item);
}
}
希望这有帮助!