[英]Communicating between classes java
我有一个名为myJPanel1
的类,我在其中创建了Student
类的实例。 我还在myJPanel1
中创建了一个按钮,显示有关这个新学生的信息。 当我单击该按钮时,我想在单独的JPanel
更改按钮的文本,该类在名为myJPanel2
类中myJPanel2
。
我的问题是,我不知道如何让myJPanel1
识别的按钮myJPanel2
这样我就可以修改按钮的文本。
myJPanel1:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class myJPanel1 extends JPanel implements ActionListener {
public myJPanel1() {
super();
setBackground(Color.yellow);
Student st1 = new Student("John", "Lodger", 44);
// the whatsUp of this student has to shown in the other panel
JButton j11 = new JButton(st1.getInfo());
j11.addActionListener(this);
add(j11);
}
public void actionPerformed(ActionEvent Event) {
Object obj = Event.getSource();
if (obj == j11) {
j2.setText(st1.whatsUp());
}
}
}
myJPanel2:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class myJPanel2 extends JPanel {
public myJPanel2() {
super();
setBackground(Color.pink);
//setLayout(new GridLayout(3,1));
JButton j1 = new JButton("When the user clicks on the button in the UPPER panel");
add(j1);
JButton j2 = new JButton("Display here whatsUp from the student in UPPER Panel");
add(j2);
JButton j3 = new JButton("===>>>>You CANNOT create a student here <======");
add(j3);
JButton j4 = new JButton("It has to be the student from the UPPER Panel");
add(j4);
}
}
你需要的是建立某种形式的合同,允许myJPanel1
改变的状态myJPanel2
不暴露任何部件的零件误操作。
例如, myJPanel1
不应该关心myJPanel2
想要对信息做什么,只是它可以向它提供信息。
您可以建立一个模型,该模型可以更改各种属性并向感兴趣的各方提供适当的更改通知,或者您可以在myJPanel2
提供一个方法,允许myJPanel1
提供您需要的信息。
例如...
public class myJPanel2 extends JPanel {
// You'll want to use these beyond the scope of the
// constructor
private JButton j1;
private JButton j2;
private JButton j3
private JButton j4;
public myJPanel2() {
super();
setBackground(Color.pink);
//setLayout(new GridLayout(3,1));
j1 = new JButton("When the user clicks on the button in the UPPER panel");
add(j1);
j2 = new JButton("Display here whatsUp from the student in UPPER Panel");
add(j2);
j3 = new JButton("===>>>>You CANNOT create a student here <======");
add(j3);
j4 = new JButton("It has to be the student from the UPPER Panel");
add(j4);
}
public void setText(String text) {
j2.setText(text);
}
}
然后在你的actionPerformed
方法中,你只需要对myJPanel2
进行活动引用并调用它的setText
方法,例如......
public class myJPanel1 extends JPanel implements ActionListener {
private myJPanel2 panel2;
public myJPanel1() {
super();
//...
panel2 = new MyJPanel2();
add(panel2);
}
public void actionPerformed(ActionEvent Event) {
Object obj = Event.getSource();
if (obj == j11) {
panel2.setText(st1.whatsUp());
}
}
}
发生这种情况是因为你没有任何对按钮的引用,你创建它们并将它们分配给一个临时引用,当构造函数完成时它的作业j1
将没有任何生存变量来保存它们。
您应该将按钮移动到JPanel
类中。
例:
public class myJPanel2 extends JPanel {
public JButton j1;
public myJPanel2() {
super();
setBackground(Color.pink);
//setLayout(new GridLayout(3,1));
j1 = new JButton("When the user clicks on the button in the UPPER panel");
add(j1);
....
}
}
评论:如果您想在全班使用它的按钮, myJPanel1
如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.