Swing JTable Hack - PullRequest
       32

Swing JTable Hack

3 голосов
/ 24 августа 2011

У меня довольно сложный подкласс JTable (WidgetTable и его WidgetTableModel), который отлично работает, когда я добавляю его в фиктивную JPanel для целей тестирования.

Поскольку я абсолютно ужасен при работе с LayoutManager, мне нравится использовать встроенный в NetBeans GUI Builder для всей моей работы с макетом. Затем я обычно просто кодирую автоматически сгенерированный код (GUI Builder), и это всегда работало для меня. Это лучшее из обоих миров: моя презентация выглядит именно так, как я хочу, и я также получаю полный контроль над компонентами.

Однако , я никогда не использовал инструмент GUI Builder для создания таблиц. После недолгой работы с ним прошлой ночью, похоже, что он хорош только для создания довольно простых (фиксированное количество строк, фиксированное количество столбцов и т. Д.) Таблиц JTable.

Мой WidgetTable на самом деле имеет динамическое число строк и столбцов, специальных редакторов / средств визуализации и многих других наворотов.

Моя проблема:

У меня есть два противоречивых ограничения: (1) мне нужно использовать GUI-конструктор для позиционирования и размера таблицы именно там, где я хочу ее в контейнере, , но , (2) компонент таблицы доступен через GUI Builder слишком прост, чтобы справиться с моим WidgetTable.

Мне нужен способ создания «заполнителя таблицы» в моем контейнере с помощью GUI-компоновщика, чтобы после того, как NetBeans автоматически сгенерировал этот код-заполнитель, я настраивал код и инструктировал его динамически создавать один из моих WidgetTables вместо этого, использование местоположения и размера, которые я определил для компонента-заполнителя.

Таким образом, я могу получить свой торт и съесть его тоже. Единственная проблема в том, что я не думаю, что GUI Builder поддерживает эту возможность перетаскивать абстрактные JComponents, размещать и изменять их размер, а затем подключать к ним подклассы в другом месте кодовой базы.

Кто-нибудь когда-нибудь сталкивался с этой проблемой или у вас есть интересные рекомендации? Я полагаю, что лучше всего было бы, если бы я просто засучил рукава и выучил LayoutManager, но я в основном разработчик на стороне сервера и только на синей луне прихожу на сторону клиента; и, честно говоря, у вас нет сил, чтобы учиться тонкостям и злобам GroupLayout и его зловещих кузенов.

Спасибо за любую помощь!

Ответы [ 3 ]

3 голосов
/ 24 августа 2011

Вставьте JTable с помощью GUI Builder, сбросьте его свойство модели до значения по умолчанию и настройте код построения так, чтобы он выглядел как

jTable1 = new WidgetTable(this.widgetTableModel);

Вы можете настроить код создания, щелкнув правой кнопкой мыши наJTable, выбрав «Настроить код», выбрав «Пользовательское создание» вместо «Код по умолчанию» в первом поле со списком и введя код для вызова конструктора.

Если вам нужна переменная jTable1, чтобывведите WidgetTable вместо JTable, отредактируйте «Код объявления переменной» в том же диалоговом окне.

1 голос
/ 24 августа 2011

NetBeans также позволяет создавать пользовательские компоненты для создания пользовательских интерфейсов.Это может быть больше работы, чем вы хотите добавить в свой WidgetTable, но если вы думаете, что вам придется создавать больше пользовательских интерфейсов с пользовательскими компонентами, это может стоить изучения.

0 голосов
/ 25 августа 2011

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

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