Возможное упрощенное решение может быть следующим:
В вашем JButton actionListener:
new ActionListener {
private JFrame jFrame = null;
public void actionPerformed(ActionEvent e) {
if (jFrame == null) {
jFrame = new A();
}
jframe.setVisable(true);
}
}
Затем я бы удалил код из конструктора A (), который делает этот кадр видимым настроительство.Это просто личное предпочтение кодирования.Мне никогда не нравилось, когда рамка появлялась во время строительства.
Конечно, это очень упрощенное решение.Вы могли бы действительно быстро найти более сложное решение.У вас могут быть посредники, которые специально слушают этот конкретный JButton, а затем имеют стратегию для показа этого нового фрейма и т. Д. Это действительно зависит от того, как вы хотите, чтобы ваш код был связан.1012 *
Более немного более сложный пример, в котором не используется анонимный внутренний класс ...
public void AMediator implements ActionListener {
JFrame jFrame = null;
public void actionPerformed(ActionEvent actionEvent) {
if (jFrame == null) {
jFrame = new A();
}
jFrame.setVisable(true);
jFrame.bringToTheFront(): // Not sure this method exists, but it might be worth it to bring this frame forward even if it is already visible.
}
}
Затем вам нужно будет зарегистрировать вышеупомянутый медиатор для каждой кнопки, которую вы хотите открыть.Экземпляр JFrame.
Существует много способов регистрации этого посредника:
- Использовать основной класс, который соединит все ваши компоненты вместе.
- Использовать внедрение зависимостей Spring.
- Использовать aцентрализованный сервис, доступный множеству разных сервисов.
- Другие?
Таким образом, у вас будет только один посредник (вместо многих анонимных внутренних классов ActionListener).