JPanels之间的通信
communication between JPanels
我有一个创建面板 1 和面板 2 的 JPanel class。面板 1 和面板 2 各有一个按钮。我想要完成的是,当我单击 Panel1 中的按钮时,它会更新 Panel2 中的按钮。我必须在不更改 Panel2 中的任何内容的情况下执行此操作。
基本上我必须让 Panel1 有办法跟踪 Panel2 的实例,我必须通过 JPanel class 来完成。
但我不知道从哪里开始甚至完成这个。
myJPanel.java
import java.awt.*;
import javax.swing.*;
public class myJPanel extends JPanel
{
public myJPanel()
{
super();
setBackground(Color.gray);
setLayout(new BorderLayout());
myJPanel1 p1 = new myJPanel1();
add(p1,"North");
myJPanel2 p2 = new myJPanel2();
add(p2,"Center");
}
}
myJPanel1.java
import java.awt.*;
import javax.swing.*;
public class myJPanel1 extends JPanel
{
public myJPanel1()
{
super();
setBackground(Color.yellow);
student st1 = new student("Clark","Fontaa",26);
// the whatsUp of this student has to shown in the other panel
JButton jl1 = new JButton(st1.getInfo());
add(jl1);
}
}
myJPanel2.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class myJPanel1 extends JPanel implements ActionListener
{
student st1 = new student("Fred","Fonseca",44);
JButton jl1;
public myJPanel1()
{
super();
setBackground(Color.yellow);
jl1 = new JButton(st1.getInfo());
jl1.addActionListener(this);
add(jl1);
}
public void actionPerformed(ActionEvent event){
Object obj = event.getSource();
if (obj == jl1){
// something here
}
}
感谢您的帮助!
在 myJPanel1 class 中添加一个 Panel 类型的新字段,这样您就可以引用 Jpanel2,这样您就可以在不更改 Panel 2 中的任何内容的情况下进一步使用它。因此请按照以下步骤操作:
- 添加名为 Panel panel2 的新字段,并在构造函数中添加 Panel 参数,如
myJPanel1(JPanel panel) {//set local panel2 instance variable now}
在您的 myJPanel
class 中,更改以下内容:
myJPanel1 p1 = new myJPanel1();
add(p1,"North");
myJPanel2 p2 = new myJPanel2();
add(p2,"Center");
到
myJPanel2 p2 = new myJPanel2();
add(p2,"Center");
myJPanel1 p1 = new myJPanel1(p2);//reverse the order of panel instantiation and pass p2 to panel1.
add(p1,"North");
现在你可以在 p1 中引用 p2,如果你可以的话。
- 使用equals方法来做比较而不是
==
我有一个创建面板 1 和面板 2 的 JPanel class。面板 1 和面板 2 各有一个按钮。我想要完成的是,当我单击 Panel1 中的按钮时,它会更新 Panel2 中的按钮。我必须在不更改 Panel2 中的任何内容的情况下执行此操作。 基本上我必须让 Panel1 有办法跟踪 Panel2 的实例,我必须通过 JPanel class 来完成。 但我不知道从哪里开始甚至完成这个。
myJPanel.java
import java.awt.*;
import javax.swing.*;
public class myJPanel extends JPanel
{
public myJPanel()
{
super();
setBackground(Color.gray);
setLayout(new BorderLayout());
myJPanel1 p1 = new myJPanel1();
add(p1,"North");
myJPanel2 p2 = new myJPanel2();
add(p2,"Center");
}
}
myJPanel1.java
import java.awt.*;
import javax.swing.*;
public class myJPanel1 extends JPanel
{
public myJPanel1()
{
super();
setBackground(Color.yellow);
student st1 = new student("Clark","Fontaa",26);
// the whatsUp of this student has to shown in the other panel
JButton jl1 = new JButton(st1.getInfo());
add(jl1);
}
}
myJPanel2.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class myJPanel1 extends JPanel implements ActionListener
{
student st1 = new student("Fred","Fonseca",44);
JButton jl1;
public myJPanel1()
{
super();
setBackground(Color.yellow);
jl1 = new JButton(st1.getInfo());
jl1.addActionListener(this);
add(jl1);
}
public void actionPerformed(ActionEvent event){
Object obj = event.getSource();
if (obj == jl1){
// something here
}
}
感谢您的帮助!
在 myJPanel1 class 中添加一个 Panel 类型的新字段,这样您就可以引用 Jpanel2,这样您就可以在不更改 Panel 2 中的任何内容的情况下进一步使用它。因此请按照以下步骤操作:
- 添加名为 Panel panel2 的新字段,并在构造函数中添加 Panel 参数,如
myJPanel1(JPanel panel) {//set local panel2 instance variable now}
在您的
myJPanel
class 中,更改以下内容:myJPanel1 p1 = new myJPanel1(); add(p1,"North"); myJPanel2 p2 = new myJPanel2(); add(p2,"Center");
到
myJPanel2 p2 = new myJPanel2(); add(p2,"Center"); myJPanel1 p1 = new myJPanel1(p2);//reverse the order of panel instantiation and pass p2 to panel1. add(p1,"North");
现在你可以在 p1 中引用 p2,如果你可以的话。
- 使用equals方法来做比较而不是
==