Swing JTable Hack
У меня довольно сложный подкласс JTable (WidgetTable
И его WidgetTableModel
) это прекрасно работает, когда я добавляю его в фиктивную JPanel для целей тестирования.
Так как я абсолютно ужасно работаю с LayoutManager, мне нравится использовать встроенный в NetBeans GUI Builder для всей моей работы с макетом. Затем я обычно просто кодирую автоматически сгенерированный код (GUI Builder), и это всегда работало для меня. Это лучшее из обоих миров: моя презентация выглядит именно так, как я хочу, и я также получаю детальный контроль над компонентами.
Тем не менее, я никогда не использовал инструмент GUI Builder для создания таблиц. После недолгой работы с ним прошлой ночью, похоже, что она хороша только для создания довольно простых (фиксированное количество строк, фиксированное количество столбцов и т. Д.) Таблиц JTable.
мой WidgetTable
фактически имеет динамическое число строк и столбцов, специальных редакторов / средств визуализации и многих других наворотов.
Моя проблема:
У меня есть два противоречивых ограничения: (1) мне нужно использовать GUI-конструктор для позиционирования и размера таблицы именно там, где я хочу ее в контейнере, но, (2) компонент таблицы, доступный через GUI-компоновщик, слишком прост, чтобы обрабатывать мои WidgetTable
,
Мне нужен способ создания "заполнителя таблицы" в моем контейнере с помощью GUI-компоновщика, чтобы, как только NetBeans автоматически генерировал этот код-заполнитель, я настраивал код и инструктировал его динамически создавать один из моих WidgetTables
вместо этого, используя местоположение и размер, которые я определил для компонента-заполнителя.
Таким образом, я могу получить свой торт и съесть его тоже. Единственная проблема, я не думаю, что GUI Builder поддерживает эту возможность перетаскивания абстрактных JComponents
расположите и измените их размер, а затем подключите к ним подклассы в другом месте кодовой базы.
Кто-нибудь когда-нибудь сталкивался с этой проблемой или есть интересные рекомендации? Я полагаю, что лучше всего было бы, если бы я просто засучил рукава и выучил LayoutManager, но я в основном разработчик на стороне сервера и только на синей луне прихожу на сторону клиента; и, честно говоря, не хватает энергии, чтобы узнать о хитросплетениях и гадостях GroupLayout и его зловещих кузенов.
Спасибо за любую помощь!
3 ответа
Вставьте JTable, используя GUI Builder, сбросьте его свойство модели до значения по умолчанию и настройте код построения так, чтобы он выглядел как
jTable1 = new WidgetTable(this.widgetTableModel);
Вы можете настроить код создания, щелкнув правой кнопкой мыши JTable, выбрав "Настроить код", выбрав "пользовательское создание" вместо "код по умолчанию" в первом поле со списком и введя код для вызова конструктора.
Если вам нужна переменная jTable1, чтобы иметь тип WidgetTable
скорее, чем JTable
отредактируйте "Код объявления переменной" в том же диалоговом окне.
NetBeans также позволяет создавать пользовательские компоненты для создания пользовательских интерфейсов. Это может быть больше работы, чем вы хотите поместить в свой WidgetTable, но если вы думаете, что вам придется создавать больше пользовательских интерфейсов с пользовательскими компонентами, это может стоить изучения.
Я делаю это все время. У меня есть подкласс JTable, который я использую с редактором графического интерфейса, и это динамический.
- Добавьте JTable в ваш проект, используя графический редактор и макет по вашему выбору.
- Как только таблица будет добавлена, щелкните ее правой кнопкой мыши и выберите пользовательский код.
- В конструкторе JTable измените его на:
new WidgetTable(new WidgetModel())
вместоnew JTable(new DefaultTableModel())
, - Создайте глобальную переменную для вас WidgetTable. Что-то вроде
private WidgetTable widgetTable;
- В вашем конструкторе после вызова initComponents() приведите ваш JTable к таблице виджетов и используйте его с этого момента. `widgetTable = (WidgetTable)jTable1;