2016-03-28 2 views
2

У меня есть этот код, который я ссылающийся в Java Eclipse:Как включить кнопку в другом классе с участием ActionListener

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, когда я нажимаю еще одну кнопку на панели, я хочу, чтобы две отключенные кнопки были включены, как бы я это сделал?

+0

Создайте ссылку на класс с помощью 'enableButtons()' в своем классе с помощью 'ActionListener'. –

+0

Как создать ссылочный класс? Извините, новичок в Java:/ –

+0

У вас есть класс, который мы будем называть 'ButtonClass', который имеет метод' enableButtons() '. Допустим, у вас также есть класс под названием «ActionClass», который расширяет «ActionListener». Вам нужно будет определить объект 'ButtonClass b' в' ActionClass', затем в 'actionPerformed', вы можете называть' b.enableButtons(); '. Не забудьте создать экземпляр 'b', или вы получите' NullPointerException'. –

ответ

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);      
    } 
} 
+0

Для моего класса JPanel он расширяет JPanel, я могу расширять и реализовывать? –

+0

@CenaMaine Да, вы можете подклассифицировать только один класс, но вы можете одновременно реализовать несколько интерфейсов. –

+0

О, ладно, спасибо! –

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(); 
    } 
} 
+0

Хорошо, имеет смысл, но откуда это происходит? –

+0

@CenaMaine Хороший вопрос! 'this' происходит от ссылки на' ClassWithButton'. Поэтому, когда я говорю 'act = new ActionListenerImpl (this);', я хочу, чтобы 'this' ссылался на текущий объект, который вызывается. И этот объект имеет тип 'ClassWithButton'. Поэтому, когда я использую его в ActionListenerImpl, тип для параметра конструктора будет иметь тип 'ClassWithButton'. –

+0

Благодарим за помощь! –

Смежные вопросы