多个类中的Java按钮操作

时间:2012-02-14 01:27:01

标签: java swing oop button methods

使用Java:我有一个JFrame类,以及添加到JPanels的两个JFrame的单独类。其中一个JPanel类中有一些按钮,可以互相交互(当我点击一个按钮时,它可以禁用另一个按钮)。但是,我无法弄清楚如何让按钮调用另一个JPanel中的方法(在一个单独的类中编写)。

所以,我的程序看起来像这样:

的JFrame

  • JPANEL1
  • Jpanel2 - 这个类里面有我的按钮,我试图让它们与JPanel1对象进行交互。

任何提示都表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:5)

执行此操作的一种方法是将(使用您的术语)Jpanel1的实例传递给Jpanel2。这不必在构造函数中完成,例如,您可以使用setConnectedPanel(JPanel)方法。

以下是一些演示您想要做的事情的代码:

MyFrame.java

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class MyFrame extends JFrame {

  public MyFrame() {
    ReactionPanel rp = new ReactionPanel();
    ActionPanel ap = new ActionPanel(rp);
    setLayout(new GridLayout(2, 1));
    add(ap);
    add(rp);
    pack();
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new MyFrame();
      }
    });
  }
}

ActionPanel.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

public class ActionPanel extends JPanel implements ActionListener {
  private ReactionPanel rp;
  private JButton button;

  public ActionPanel(ReactionPanel rp) {
    this.rp = rp;
    button = new JButton("Click");
    button.addActionListener(this);
    this.add(button);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if(e.getSource().equals(button)) {
      rp.react();
    }
  }
}

ReactionPanel.java

import javax.swing.JLabel;
import javax.swing.JPanel;

public class ReactionPanel extends JPanel {
  private JLabel label;

  public ReactionPanel() {
    label = new JLabel("PING");
    this.add(label);
  }

  public void react() {
    if(label.getText().equals("PING")) {
      label.setText("PONG");
    } else {
      label.setText("PING");
    }
  }
}

正如您所看到的,当我编写Swing GUI时,我倾向于覆盖所有JFrame / JPanel,因为我发现它更容易,更灵活但是YMMV。