Использование статических классов фабрики для генерации компонентов GUI - Как и где добавить требуемых слушателей? - PullRequest
4 голосов
/ 23 августа 2010

Я хотел бы использовать фабричные классы и методы для генерации компонентов GUI, но я не знаю, как и в каком классе различные слушатели должны быть объявлены и добавлены к компонентам.

Если у меня естьпростой фабричный класс, такой как перечисленный ниже, должен добавить ActionListener к кнопке, прежде чем она будет возвращена вызывающему классу.Если ответ «Да», то как мне добавить слушателя?

class GUIFactory
{
    public static JButton getJButton()
    {
        JButton aButton = new JButton();
        return aButton; 
    }
}

Предположим, я хотел использовать метод getJButton () для добавления 5 кнопок в GUI, как бы я закодировал ActionListener так, чтобыон бы знал, какая кнопка была нажата?

Или следует добавить слушателей в вызывающий класс?

JFrame gui = new JFrame();
gui.add(AppFactory.getJButton());

Я пробовал следующее

gui.add(GUIFactory.getJButton().addActionListener(new guiButtonListener()));

иполучил ошибку:

тип "void" здесь не разрешен.

1 Ответ

5 голосов
/ 23 августа 2010

Это потому что addActionListener возвращает пустоту. Попробуйте:

JButton button = GUIFactory.getJButton();
button.addActionListener(new guiButtonListener())
gui.add(button);

Имейте в виду, что программирование на Swing GUI довольно идиоматично. Некоторые предпочитают использовать Beans Binding (или другое связующее решение) для соединения видов и моделей друг с другом. Можно было бы утверждать, что использование Event Bus дает лучшие, слабо связанные, многократно используемые компоненты GUI. Также обратите внимание на инфраструктуру приложений Swing (сейчас устарела, но BSAF for находится в очень хорошем состоянии) и GUTS framework.

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

Да, и две большие платформы контента Swing Rich ( NetBeans RCP , Eclipse RCP ) имеют очень специфические API для работы с графическими интерфейсами. Например, NetBeans RCP использует API-интерфейсы Lookup , Nodes и Windows для защиты разработчика от проблем Swing. Команда Eclipse отказалась от Swing и написала собственный инструментарий SWT GUI. Возможно, вы захотите взглянуть на учебные пособия, если хотите получить отличные рекомендации по дизайну.

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