У команды, в которой я работаю, возникают проблемы с визуальным наследованием форм на платформе Java.
Мы хотим разработать базовый JFrame с некоторыми элементами управления и унаследовать формы от этого базового JFrame. Разработчик Netbeans 6.1 не закрашивает элементы управления базовой формы в унаследованные, поэтому мы не можем использовать ее так, как нам хочется. Во время выполнения унаследованные формы хорошо окрашены, с родительскими элементами управления.
Дизайнер Netbeans
Кто-нибудь решил это? Стоит ли менять IDE?




Просто общий комментарий, а не реальный ответ на вашу ситуацию - визуальные компоненты не предназначены для наследования. Например, посмотрите на ужасную ошибку, которую совершила Sun, унаследовав все от Component - теперь у вас есть JList, в который вы не можете использовать .add () для добавления элементов. Если вы не можете выполнить весь контракт суперкласса (а я знаю только несколько классов, которые могут), предпочитайте композицию, а не наследование. Предоставьте методы, которые вы планируете выполнять, и метод «Component getAsComponent ()» с явным объявлением, что компонент не должен изменяться напрямую. Я считаю, что это намного проще, чем думать о том, «что мне делать, если кто-то использует add (JLabel) к моему компоненту? Или setLayout ()?».
Что касается вашего конкретного затруднительного положения - я использую JFormDesigner в IntelliJ IDEA, но он также может применяться. JFD имеет хороший способ использования информации компонента BeanInfo (для компонента с именем «MyThingy» класс информации будет «MyThingyBeanInfo»). Используя этот класс, вы можете определить множество вещей для использования только во время разработки, а также специальные методы рисования и другие тонкости.
AFAIK, Матисс на самом деле не предназначен для создания унаследованных форм. Он предназначен для композиции (т.е. создать собственный компонент JComponent и поместить его в форму Matisse).
Конструктор форм не использует файл java для создания формы, он использует файл «формы». Это не передается по наследству. Если вам абсолютно необходимо использовать наследование (чего я бы не рекомендовал), вам нужно будет скопировать содержимое файла «формы» в свой дочерний класс.
Как правило, вы должны создать какую-либо настраиваемую панель JPanel (используя Matisse или нет), а затем поместить эту форму в свой JFrame. Любой пользовательский код / события, которые необходимо повторно использовать, должны быть прикреплены к JFrame, должны быть созданы в bean-компонентах, а затем добавлены в форму.
Netbeans 7 рассматривает возможность обновления кодогенерации Matisse. Я предлагаю поместить это как запрос на улучшение в www.netbeans.org.
Jaguar, вы должны изменить элемент управления доступом (щелкните правой кнопкой мыши элемент управления, выберите «настроить код», см. Нижнюю часть окна)