从另一个班级

时间:2016-01-15 01:15:49

标签: java combobox

是否可以从不同的类别设置组合框的选定项目?假设我有A类和B类,在A类中我设置了组合框并将其添加到Jframe中。我可以做类似ClassA.comboBox.setSelectedItem(“Option1”)的事情;从B班?这不起作用,但我希望它说明了我想要做的事情。你知道如何用Java实现这个结果吗?非常感谢。

3 个答案:

答案 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);
    }

}

希望这有帮助!