0

我有三个类,我在其中创建 JPanel 对象,即 MyObject 扩展 JPanel。我在主方法调用中调用所有三个面板。

 MyObject1 mo1 = new MyObject1(); // contains a textfield and a button
 MyObject2 mo2 = new MyObject2(); // contains a textarea holding a long paragraph
 MyObject3 mo3 = new MyObject3();

如何让 mo1 调用 mo2 上的方法来更改文本区域的文本?

感谢所有的建议家伙!我将继续接受第一个答案。它解决了我的问题。

更新 其中一个面板是我程序中另外两个面板的组合,这阻碍了我将对象实例传递给某个类的能力。通过删除该面板类并仅在 main 中创建一个 jpanel 然后将两个面板添加到新的 jpanel 中,我能够将类的实例传递给每个构造函数。

所以反过来我的解决方案是

JPanel panelHolder = new JPanel(); // create a panel in my main instead of a new class
MyObject2 mo2 = new MyObject2(); // contains a textarea holding a long paragrah
MyObject1 mo1 = new MyObject1(mo2); // contains a textfield and a button
panelHolder.add(mo1);
panelHolder.add(mo2);
MyObject3 mo3 = new MyObject3();

然后在 mo2 类中:

private MyObject1 object1;

// constructor for mo2 Class
public MyObject2(MyObject1 object1){

this.object1 = object1; // to get the instance of object1
....// other constructor pieces
}

再次感谢大家!

4

3 回答 3

2

为什么不将MyObject1实例的引用传递给 的构造函数MyObject2

 MyObject1 mo1 = new MyObject1();
 MyObject2 mo2 = new MyObject2(mo1);

然后,(假设您的方法是公共的或包私有的)您可以简单地mo1.methodName()mo2. 正如我在评论中提到的,您应该在其构造函数中实例化您计划编辑的任何组件mo1,以避免在从mo2.

于 2013-05-13T19:00:32.623 回答
1

如何传递MyObject1to的引用MyObject2

public class MyObject2 extends JPanel
{
    private MyObject1 obj;

    public MyObject2(MyObject1 obj)
    {
        this.obj = obj;
    }
}

然后你的代码将是这样的:

MyObject1 mo1 = new MyObject1();
MyObject2 mo2 = new MyObject2(mo1);

  • 如果您希望每个类都引用另一个类怎么办?

  • 简单的。只需添加一个MyObject1像这样的设置器:

public class MyObject1 extends JPanel
{
    private MyObject2 obj;

    public MyObject1()
    {
        // ...
    }

    public void setMyObject2Reference(MyObject2 obj)
    {
        this.obj = obj;
    }
}

接着:

MyObject1 mo1 = new MyObject1();
MyObject2 mo2 = new MyObject2(mo1);
mo1.setMyObject2Reference(mo2);
于 2013-05-13T19:01:52.537 回答
0
 MyObject1 mo1 = new MyObject1(); // contains a textfield and a button
 MyObject2 mo2 = new MyObject2(); // contains a textarea holding a long paragrah
 MyObject3 mo3 = new MyObject3();

将其更改为

 MyObject2 mo2 = new MyObject2(); // contains a textarea holding a long paragrah
 MyObject1 mo1 = new MyObject1(m02); // contains a textfield and a button
 MyObject3 mo3 = new MyObject3();

然后你可以调用 mo1.getM02().updateText("test");

于 2013-05-13T19:01:59.083 回答