我有三个类,我创建了JPanels对象,即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
}
再次感谢你们!
答案 0 :(得分:2)
为什么不将对MyObject1
实例的引用传递给MyObject2
的构造函数?
MyObject1 mo1 = new MyObject1();
MyObject2 mo2 = new MyObject2(mo1);
然后,(假设您的方法是公开的或包裹私密的),您只需从mo1.methodName()
拨打mo2
即可。正如我在评论中提到的,您应该在其构造函数中实例化您计划在mo1
中编辑的任何组件,以避免在您从mo2
进行调用时出现NullPointerExceptions。
答案 1 :(得分:1)
如何将MyObject1
的引用传递给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
添加一个setter,例如:
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);
答案 2 :(得分: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”);
一样调用