общий вопрос о Java Swing

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

Таким образом, мой вопрос состоит в том, как сделать хорошую структуру кода. Или если существует хорошая веб-страница, я могу читать об этом, и, если возможно некоторые примеры кода. Я проверил учебное руководство Sun о Swing, но они довольно упрощенные примеры они показали.

ОБНОВЛЕНИЕ: Я имею обдумывание некоторое время и проверяю на некоторые примеры. Я не знаю, получил ли я корректный шаблон MVC. Так или иначе моя идея состоит в том, чтобы разделить каждый JFrame в их собственный файл класса. Позже у меня есть один MainFrame, который является главным окном для приложения. От этого JFrame я создаю один экземпляр каждого JFrame, который я имею. И звоните, они структурируют от MainFrame с Действиями. Я не знаю, является ли это хорошей идеей. Однако это делает код значительным легче читать так или иначе.

Вот пример того, как я имел в виду

class Main implements ActionListener {

    private JFrame frame = new JFrame();
    private JButton button1 = new JButton();
    private JPanel panel = new JPanel();

    private FirstFrame frame1 = new FirstFrame();
    private SecondFrame frame2 = new SecondFrame();
    private ThirdFrame frame3 = new ThirdFrame();

    public Main() {
        button1.addActionListener(this);
    }

    public createGUI() {
        frame.setTitle("Main");
        frame.setSize(400,300);
        panel.add(button);

        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        new Main().createGUI();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button1)
        {
            frame1.enable();
        }
    }
}
7
задан starcorn 26 December 2009 в 19:59
поделиться

4 ответа

Важно помнить, что программирование пользовательского интерфейса - это просто как и другие виды программирования. Не думайте, что это что-то особенное и что вы можете игнорировать разумные методы. К сожалению, большая часть учебного кода очень плохая, а код в производстве, по-видимому, имеет тенденцию быть намного хуже.

Ключевые моменты:

  • Используйте многоуровневый дизайн. Это не просто настойчивость-бизнес-интерфейс. Разделите его более мелким. Например, слой макета не должен создавать компоненты (кроме макета, обычно JPanel s).
  • Предпочитайте композицию наследованию. Очень мало смысла в подклассах подобных JFrame и JPanel , так что не делайте этого.
  • Сохраняйте тонкий интерфейс. Например, в рендерерах должно быть очень мало логики. Во-первых, это значительно упрощает тестирование (автоматическое тестирование, крупномасштабное ручное тестирование контрпродуктивно).
1
ответ дан 6 December 2019 в 12:51
поделиться

Использовать Шаблон проектирования Model-View-Controller. Он занимается отделением кода пользовательского интерфейса от бизнес-логики.

EDIT :

Поскольку операционная система ищет организованный код, а не гибкую конструкцию, я удалил из своего ответа часть NetBeans UI Designer.

.
8
ответ дан 6 December 2019 в 12:51
поделиться

Организация кода пользовательского интерфейса любого значительного размера - проблема, о которой написано удивительно мало, учитывая, что каждое приложение имеет одну и ту же проблему. Есть несколько техник, которые могут помочь:

  1. Рефакторинг - очистка после того, как код станет неаккуратным.
  2. Model View Controller pattern - для разделения проблем.
  3. OO Design - использование множества маленьких, сотрудничающих классов вместо больших кусочков кода.
  4. "По событию Do action" - идиома для отделения действий от представлений.
  5. Модели компонентов UML - визуализируют концепции проектирования выше уровня класса.
  6. Принцип инверсии зависимости - организуют зависимости кода.

Основные приемы проектирования существуют уже достаточно давно, и их хорошо понимают, но применение приёмов в большем масштабе - это то, что кажется разработанным индивидуально для каждого приложения.

Один из подходов, который я видел эффективно применяемым, это разделение событий, слушателей, действий и т.д. на их собственные классы и либо организация их в пакеты по типам, либо использование согласованного соглашения об именовании между пакетами так, чтобы компонент и связанные с ним классы были легко идентифицируемы (XDialog, XDialogMouseListener, XDialogCancelAction и т.д.)

Другим подходом было бы посмотреть на некоторые большие приложения с открытым исходным кодом (Eclipse, Firefox, ...), и посмотреть, как они организуют свой GUI-код.

.
5
ответ дан 6 December 2019 в 12:51
поделиться

Я стараюсь вытащить из компонентов Swing как можно больше функций, не связанных с графическим интерфейсом, насколько это возможно. Это означает, что у вас есть лишнее косвенное обращение. Однако:

  1. уровень Swing ничего не делает, кроме взаимодействия с графическим интерфейсом
  2. , бизнес-функции намного легче тестировать и, следовательно, поддерживать

Я не обязательно говорю о полной модели MVC (хотя это неплохая вещь). Это скорее проблема организации класса / пакета.

2
ответ дан 6 December 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: