Вызов Jframe из другого jframe с использованием меньшего количества объектов. - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть Jframe, который содержит кнопку, которая при нажатии открывает следующий jframe (пусть это будет A)

Jframe Конструктор содержит код вроде:

setVisible(true);
setSize(343,34);

Я поместил следующий код в Jbutton actionListener:

new A();

Теперь у меня есть десять jframes, у которых тоже есть кнопка с той же функциональностью.
Я думаю, что этот подход не является правильным, так как каждый раз, когда я нажимаю, создается новый Объект А.
Есть ли другое решение этой проблемы?

1 Ответ

2 голосов
/ 21 апреля 2011

Возможное упрощенное решение может быть следующим:

В вашем 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...