#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.