多个类中的Java按钮操作

Zar*_*pel 3 java oop methods swing button

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

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

的JFrame

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

任何提示赞赏,谢谢!

Cat*_*hwa 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();
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 别担心.如果它完全回答了您的问题,您应该单击此答案旁边的绿色勾号.:) (2认同)