JButton ActionListener в классе 1, сделайте что-нибудь, когда ActionListener вызывается в классе 2 - PullRequest
0 голосов
/ 03 июня 2018

У меня есть JButtonClass, который расширяет JButton с помощью ActionListener внутри его конструктора.У меня также есть HeadClass, который содержит HashMap.Итак, JButtonClass используется в HeadClass, что означает, что я не могу указать «HeadClass headClass» в качестве параметра при создании JButtonClasses, верно?Что-то о зависимости и ошибке времени выполнения, если я правильно помню.Итак, мой вопрос, как я могу вызвать методы внутри HeadClass, когда вызывается ActionListener в JButtonClass?

РЕДАКТИРОВАТЬ: У меня нет способа узнать, какая кнопка нажата в данный момент, поэтому я хотел бы добавить методы HeadClass, которые нужно запускать, к каждому ActionListener, чтобы независимо от того, что JButtonнажал, что те же методы в HeadClass вызываются.

1 Ответ

0 голосов
/ 03 июня 2018

Я думаю, ваше мышление напоминает C ++.В C ++ вы не можете иметь один класс внутри другого внутри другого и т. Д., Так как это приведет к результату, который имеет бесконечный размер.В Java, так как все является указателем, это нормально:

class JButtonClass extends JButton {
    JButtonClass(HeadClass headClass) {
        headClass.jbtn = this;
        this.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent e) { 
                headClass.someFunction();
            } 
        });
    }
}

class HeadClass {
    HashMap hashMap;
    JButtonClass jbtn;

    void someFunction() {
        // do stuff with jbtn
    }
}

public static main(String[] args) {
    new JButtonClass(new HeadClass());
}
...