Как провести рефакторинг сгенерированного Netbeans кода GUI? - PullRequest
4 голосов
/ 23 января 2010

Я создал графический интерфейс в Netbeans через Netbeans Swing GUI создатель. Поэтому я просто перетащил компоненты Swing из окна «палитры», и весь код был сгенерирован сетевыми компонентами.

Теперь код слишком длинный для поддержки (около 10000 строк). Поэтому некоторые эксперты по SO предложили мне провести рефакторинг моего кода.

Я могу реорганизовать код, сгенерированный мной, но я не знаю, как реорганизовать код, сгенерированный Netbeans, поскольку он не позволяет редактировать сгенерированный код.

Есть предложения?

Ответы [ 5 ]

8 голосов
/ 23 января 2010

10.000 строк кода звучит так, как будто у вас есть все в этом единственном классе.

Начните с разделения вашего источника на Модель, Вид и Управление ( MVC ).


Вы также можете выделить несколько JPanels в отдельные классы. Один из способов сделать это - создать новый JPanel (новый файл) и вырезать / вставить ваши комментарии из одной главной панели в этот новый JPanel. Сохраните и скомпилируйте новую панель.

Затем вернитесь к основному кадру, выберите Beans -> Choose Bean из вашего Palette и выберите вновь созданный класс (например, com.example.YourPanel).

Убедитесь, что у вас есть резервная копия приложения, прежде чем пытаться это сделать.

2 голосов
/ 23 января 2010

Что ж, если код сгенерирован, я не вижу никаких преимуществ в его рефакторинге, если инструмент, сгенерировавший его, может его обработать.
Инструмент (в данном случае это конструктор) уничтожит всю вашу работу по рефакторингу, как только обновит код.

Однако вы должны разделить ваш Control / Window / ... на несколько элементов управления - тогда код автоматически станет короче, и вы сможете легче поддерживать свой пользовательский интерфейс.

В заключение: не рефакторинг сгенерированного кода, а рефакторинг вашего контроля.

1 голос
/ 30 марта 2012

Ручной код кода GUI с менеджерами по расположению.

Использование инструментов GUI Builder делает практически невозможным рефакторинг кода GUI. Я должен использовать эти идиотские формы дизайнера Intellij Swing GUI. Теперь я даже не могу переименовать мои пакеты в Eclipse, потому что он не будет обновляться в файле forms.XML.

Держитесь подальше от разработчиков GUI. Если вы хотите создавать действительно сложные, поддерживаемые графические интерфейсы, делайте это вручную, используя GridBagLayout и все остальное.

0 голосов
/ 01 марта 2013

Вы можете извлечь логику приложения в отдельный подкласс. Затем напрямую используйте подкласс. Мне удалось с помощью следующего метода.

  1. Определенные нами члены, имеющие отношение к логике приложения, перемещены во вновь созданный подкласс.
  2. Модификатор доступа к компонентам сделан "защищенным" (они являются "частными" дефолт). Для этого: щелкните правой кнопкой мыши -> Свойства -> Код (вкладка) -> Установить «Модификатор переменной» на «защищенный»
  3. Методы обработки событий перемещены в подкласс. Когда вы добавляете события в компонент с помощью панели свойств, он изменяет функцию initComponents (), добавляя соответствующий код, как в следующем примере кода. Здесь определение btnNum6ActionPerformed () добавляется в класс с пустым телом. К сожалению, btnNum6ActionPerformed () является закрытым и нет способа изменить модификатор доступа с помощью IDE NetBeans. Следовательно, они не могут быть отменены. Чтобы избавиться от этого, вы можете определить другую промежуточную функцию и вызвать ее внутри btnNum6ActionPerformed (). Лучше сделать базовый класс и его промежуточные функции обработки событий абстрактными.

    btnNum6.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnNum6ActionPerformed(evt);//Definition of this method is added too
        }
    });
    
0 голосов
/ 28 июня 2012

Если вам нужно использовать NetBeans из-за ограничений проекта (например, остальная часть команды или требования говорят), тогда используйте Matisse, чтобы разбить огромную форму на более мелкие панели, каждую из которых дизайнер может редактировать. Это можно сделать путем создания новой формы, а также вырезания и вставки панелей из большой формы в новую форму.

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

Если вам не нужно использовать matisse / netbeans, вы можете открыть проект в Eclipse и редактировать формы с помощью WindowBuilder, он сделает это в реальном java-коде вместо нередактируемой формы, так что вы можете затем нарезать и редактировать это к твоему сердцу.

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