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, который я использую с редактором графического интерфейса, и это динамический.

  1. Добавьте JTable в ваш проект, используя графический редактор и макет по вашему выбору.
  2. Как только таблица будет добавлена, щелкните ее правой кнопкой мыши и выберите пользовательский код.
  3. В конструкторе JTable измените его на: new WidgetTable(new WidgetModel()) вместо new JTable(new DefaultTableModel()),
  4. Создайте глобальную переменную для вас WidgetTable. Что-то вроде private WidgetTable widgetTable;
  5. В вашем конструкторе после вызова initComponents() приведите ваш JTable к таблице виджетов и используйте его с этого момента. `widgetTable = (WidgetTable)jTable1;
Другие вопросы по тегам