Swing - получить экземпляр класса главного окна из класса кнопки - PullRequest
0 голосов
/ 26 февраля 2012

Мне нужно запустить метод (давайте назовем его SampleMethod) в классе панели после нажатия на конкретную кнопку. Поскольку панели добавляются в какой-то список в экземпляре класса главного окна, я просто сделал его общедоступным и хочу получить к нему доступ в событии mouseClicked кнопки. Итак, как мне получить экземпляр главного окна, чтобы я мог получить этот список панелей, получить конкретную панель и запустить SampleMethod с этим экземпляром?

Ответы [ 4 ]

2 голосов
/ 26 февраля 2012
2 голосов
/ 26 февраля 2012

Вы можете посмотреть на Action как способ раскрыть желаемую функциональность.Обычно используется, чтобы кнопки и меню использовали один и тот же обработчик, но один Action может переслать событие другому, как показано здесь для кнопок и нажатий клавиш.

1 голос
/ 26 февраля 2012

Как панели добавляются в какой-то список в экземпляре класса главного окна ...

Экземпляр класса главного окна?Кажется, у вас есть только один экземпляр вашего главного окна, которое может расширяться JFrame или JPanel или JDialog и т. Д. В любом случае, вы можете использовать шаблон проектирования Singleton в своем приложении, чтобы получить и использовать то же самоеэкземпляр (в вашем случае тот же основной экземпляр) в любом месте вашего кода.В шаблоне Singleton конструктор класса, к которому мы применяем шаблон, является private , поэтому вы не можете создавать его экземпляры.Однако у этого класса есть также единственный статический экземпляр , на который можно ссылаться через метод getter и который можно использовать в любом коде.Посмотрите на примеры Singleton в Интернете, и вы сможете позвонить, как

YourJFrame.getInstance().getPanels(10).sampleMethod();

в ваших вложенных классах и методах, в вашем случае mouseClicked().

0 голосов
/ 26 февраля 2012

Что сказал мусор.Вместо этого используйте класс ActionListener и кнопки addActionListener (), поскольку вам нужно только знать, была ли нажата кнопка или нет.

...