Java 在按钮之间传递信息

Java 在按钮之间传递信息,java,Java,我有一个任务,我必须单击面板1中的按钮1并更改面板2中按钮2上的信息,但是我不知道如何传递信息 我想我可能能够将方法b()中的信息从panel2传递回1,但这不起作用 我被卡住了,不知道如何推进这个计划。感谢您的帮助 小组1 public class MyJPanel1 extends JPanel implements ActionListener { Student st1 = new student("Fred","Fonseca",44); JButton j = ne

我有一个任务,我必须单击面板1中的按钮1并更改面板2中按钮2上的信息,但是我不知道如何传递信息

我想我可能能够将方法b()中的信息从panel2传递回1,但这不起作用

我被卡住了,不知道如何推进这个计划。感谢您的帮助

小组1

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 
            }
        }
    }
 }
小组2

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);
    }

 }

MyJPanel2
中创建一个方法,在
JButton
中设置文本

public class myJPanel2 extends JPanel {
    JButton button = new JButton("");

    ...........

    public void setButtonText(String text) {
        button.setText(text);
    }
}
MyJPanel2
中,您需要存储
MyJPanel1
的引用。然后在
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);
            }
        }
    }
 }

有几件事要记住。Java是一种面向对象的语言,这意味着您希望使用类定义对象,然后尽可能地重用这些对象。如果您有两个面板,每个面板都包含一个按钮,那么这就是定义一次类的最佳时机

public class MyPanel extends JPanel{
  protected JButton button;

  public MyPanel(String buttonName){
    button = new JButton(buttonName);
  }
  //etc etc etc
}
然后一遍又一遍地使用这个类

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的方法

您可以在MyProgram中调用此方法以更改其中一个按钮上的文本

myPanel1.setText("New Button 1 text");
但我们如何知道myPanel1或myPanel2中的按钮是否被按下?您可以了解Java如何在不同对象之间通信事件


祝你好运

如果我写sea,你就不会把那两个面板连在一起。把它们联系在一起的最好方法是在你申报这两个类别时从第三个卡拉斯开始。把这两门课放在一起。 例如:

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调用所有公共方法


更好的方法是创建接口并只传递接口(侦听器)如果clas实现了接口,你就可以通过整个类,但它更清晰,还有其他建议。

这里是你的提示:代码中将信息从你按下的按钮发送到你想要更改的按钮的部分必须知道这两个按钮。你能澄清一下吗?我认为方法b应该将j1中的信息交换为j2中的信息。我在actionperformed中尝试的任何东西都不起作用。
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;
    }
}