приемлема передача JFrame на Java?

#java #swing #jframe

#java #swing #jframe

Вопрос:

У меня есть класс, который расширяет JFrame…

Затем я присваиваю его переменной

 JFrame frame = this;
  

Теперь мне нужно передать этот фрейм в класс ActionListener, называемый LoginListener, но для этого мне нужно сначала передать его в класс AppLoginComponents, который расширяет JPanel, и у этого класса есть экземпляр LoginListener (информация, вход, фрейм)

Итак, это так

Фрейм расширения класса -> AppLoginComponents -> LoginListener

Причина, по которой я это делаю, заключается в том, что LoginListener должен выйти из приложения, если пользователь не вошел в систему в течение 2 минут. Я планирую утилизировать фрейм. Я не думаю, что статическая переменная была бы идеальной, не так ли?

Ответ №1:

Нет, не используйте статическую переменную. Да, передавать ссылки по кругу нормально. Вы также можете получить ссылку на содержащее окно верхнего уровня с помощью SwingUtility метода, вызываемого getWindowAncestor(Component c) .

Но возникает вопрос — зачем иметь класс, расширяющий JFrame? Вы переопределяете какой-либо из методов JFrame?

Комментарии:

1. Переопределяются только методы add,setSize, setVisible и pack. Я не знал о getWindowAncestor, спасибо!

2. Предпочтительнее передавать ссылки по кругу или использовать getWindowAncestor от SwingUtility?

3. То есть вы на самом деле переопределяете эти методы, а не просто вызываете их в конструкторе класса? Честно говоря, я не знаю, что предпочтительнее. Я думаю, что вы не можете вызвать getWindowAncestor до того, как графический интерфейс будет отрисован (pack () или setVisible (true) вызывается в окне верхнего уровня), иначе вы можете получить значение null.

4. Извините, я не переопределяю методы JFrame, да, я вызываю их в конструкторе classes.