如何在涉及ActionListener的另一个类中启用按钮

时间:2016-03-28 19:27:28

标签: java user-interface button

我有这个我在Java Eclipse中引用的代码:

public class ClassWithButton extends JFrame{
    private final JPanel Your_Panel_name;

    public void enableButtons() {
    for (Component c : Your_Panel_name.getComponents()) {
      if (c instanceof JButton) 
         c.setEnabled(true);
     }
  }
}

然后有一个实现ActionListener.java

的类
public class ActionListenerImpl implements ActionListener{
    public void actionPerformed(ActionEvent e){

    }
}

我在一个扩展JFrame的类中有一个按钮,我有一个面板,我在其中禁用了两个按钮。我有另一个扩展ActionListener的类,当我按下面板上的另一个按钮时,我想要启用2个禁用按钮,我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

我建议您定义自己的Listener课程以实现目标。

首先,定义一个Listener类。

public interface ButtonEnabledListener {
    void buttonEnabled(boolean isEnabled);
}

其次,为ListenerJFrame课程实施此JPanel

public YourJPanel extends JPanel implements ButtonEnabledListener {
    void buttonEnabled(boolean isEnabled) {
        for (JButton button : buttons) {
            button.setEnabled(isEnabled);
        }
    }
}

最后,在另一个课程中,传递您的框架或面板并触发事件。由于您的类实现了ActionListener,因此在实现的方法中触发事件。

public AnotherClass implements ActionListener {
    JButton yourButton;
    ButtonEnabledListener listener;
    public AnotherClass(ButtonEnabledListener yourPanel) {
       yourButton = new JButton("enable buttons in my panel");
       yourButton.addActionListener(this);
       listener = yourPanel;
    }
    public void actionPerformed(ActionEvent e) {
        listener.buttonEnabled(true);                    
    }
}

答案 1 :(得分:1)

使用您提供的代码,这里有一个关于引用如何工作的快速示例,但这不是我实现它的方式。

public class ClassWithButton extends JFrame{
    private final JPanel Your_Panel_name;
    ActionListenerImpl act;
    JButton otherButton;
    public ClassWithButton()
    {
        act = new ActionListenerImpl(this);
        otherButton = new JButton("Click to enable");
        otherButton.addActionListener(act);
    }
    public void enableButtons() {
        for (Component c : Your_Panel_name.getComponents()) {
            if (c instanceof JButton) 
                c.setEnabled(true);
        }
    }
}

public class ActionListenerImpl implements ActionListener{
    ClassWithButton b;
    public ActionListenerImpl(ClassWithButton b)
    {
        this.b = b;
    }
    public void actionPerformed(ActionEvent e){
        b.enableButtons();
    }
}