我有一个名为myJPanel1
的类,在其中创建了一个Student
类的实例。我还在myJPanel1
中创建了一个按钮,用于显示有关此新学生的信息。当我单击该按钮时,我想在名为JPanel
的类中编写的单独的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());
}
}
}