在按钮之间传递信息

时间:2013-09-30 18:02:17

标签: java

我有一个任务,我必须单击面板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);
    }

 }

3 个答案:

答案 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实现接口但它更清楚和其他优点。