我有一个任务,我必须单击面板1中的按钮1并更改面板2中按钮2的信息,但是我无法弄清楚如何传递信息。
我以为我可以将方法b()中的信息从panel2传递回一个,但这不起作用。
我很困难,不知道如何推进该计划。任何帮助表示赞赏。
Panel1的
public class MyJPanel1 extends JPanel implements ActionListener {
Student st1 = new student("Fred","Fonseca",44);
JButton j = new JButton(st1.getInfo());
JButton b1 = new JButton("..");
public myJPanel1() {
super();
setBackground(Color.yellow);
// the whatsUp of this student has to shown in the other panel
j.addActionListener(this);
add(j);
}
public void actionPerformed(ActionEvent event) {
Object obj = event.getSource();
//=====================================
if (obj == j){
b1.setText(st1.whatsUp()); // Output on JButton in JPanel2
}
}
}
}
是Panel2
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class myJPanel2 extends JPanel {
JButton j1 = new JButton("");
public void b(JButton b1) {
JButton j1 = b1;
}
public myJPanel2() {
super();
setBackground(Color.pink);
setLayout(new GridLayout(3,1));
add(j1);
// j1.setText(b1);
}
}
答案 0 :(得分:0)
在MyJPanel2
中创建一个方法,用JButton
设置文字。
public class myJPanel2 extends JPanel {
JButton button = new JButton("");
...........
public void setButtonText(String text) {
button.setText(text);
}
}
在MyJPanel2
中,您需要存储MyJPanel1
的引用。然后,只需拨打setButtonText
ActionListener
即可
public class MyJPanel1 extends JPanel implements ActionListener {
private MyJPanel2 panel;
public MyJPanel1(MyJPanel2 panel) {
this.panel = panel;
}
public void actionPerformed(ActionEvent event) {
if (obj == j){
panel.setButtonText(yourText);
}
}
}
}
答案 1 :(得分:0)
要记住几件事。 Java是一种面向对象的语言,这意味着您希望使用类定义对象,然后尽可能地重用这些对象。如果您有两个面板,每个面板都包含一个按钮,那么这是定义类一次的完美时间
public class MyPanel extends JPanel{
protected JButton button;
public MyPanel(String buttonName){
button = new JButton(buttonName);
}
//etc etc etc
}
然后反复使用Class
public class MyProgram {
protected MyPanel panel1;
protected MyPanel panel2;
public MyProgram(){
panel1 = new MyPanel("Button 1");
panel2 = new MyPanel("Button 2");
}
//etc etc
}
现在,一旦您设置了这样的程序,就可以很容易地在两个面板之间进行通信,因为在 MyProgram 中,您可以使用两个面板实例。
所以,假设您的 MyPanel 类有一个名为 setButtonText的方法
public void setButtonText(String text){
button.setText(text);
}
您可以在 MyProgram 中调用此方法,以便更改其中一个按钮上的文字
myPanel1.setText("New Button 1 text");
但我们怎么知道 myPanel1 或 myPanel2 中的按钮是否被按下了?您可以了解Java如何使用ActionListener在不同对象之间传递事件。
祝你好运!答案 2 :(得分:0)
如果我写海,你没有将这两个面板连接在一起。将它们连接在一起的最好方法是从你宣布这两个方面的thlass calass。并且每个都设置这两个类。 例如:
class conecctor{
ClassA first;
ClassB secod;
public void init(){
{
first=new ClassA();
second=new ClassB();
first.setClasB(second);
second.setClasA(first);
}
}
class ClassA{
ClassB classB;
public void setClassB(ClassB classB){
this.classB=classB;
}
}
class ClassB{
ClassA classA;
public void setClassA(ClassA classA){
this.classA=classA;
}
}
然后当你在每个班级都有实例时,你可以调用evrywher的所有公共方法。
Beter方式是创建接口并且只是传递接口(监听器)窃取你传递整个类,如果clas实现接口但它更清楚和其他优点。