我有这个我在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个禁用按钮,我该怎么做呢?
答案 0 :(得分:1)
我建议您定义自己的Listener
课程以实现目标。
首先,定义一个Listener
类。
public interface ButtonEnabledListener {
void buttonEnabled(boolean isEnabled);
}
其次,为Listener
或JFrame
课程实施此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();
}
}