JTable Madness? - PullRequest
       15

JTable Madness?

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

Я читал учебник по Swing " Как использовать таблицы ", и хотя он был очень информативным для новичка JTable, я сразу же сталкиваюсь с препятствиями в секунду, когда пытаюсь отклониться отпримеры и вычеркнуть самостоятельно.

Итак, если вы хотите, чтобы у вашего приложения Swing была изящная, настраиваемая таблица, похоже, что это несколько основных классов, с которыми вы будете работать как минимум:

  • JTable
  • TableModel
  • TableModelListener
  • TableModelEvent
  • TableColumnModel
  • TableColumnModelListener
  1. Просто из чтения учебников и JavaDocs мне не очевидно, в чем разница между TableModel и TableColumnModel , и как они связаны друг с другом.Очевидно, что модель столбцов относится только к одному столбцу или ко всем столбцам (?), Тогда как модель таблицы является более общей. Но как они связаны друг с другом?С какими сферами ответственности справляется каждая из них?TableModel управляет, контролирует или как-то содержит TableColumnModel?

  2. Тесно связан с первым вопросом, , в какой модели я указываю редакторы и средства визуализации ячеек?

  3. Я предполагаю, что для каждого из этих объектов я должен создать подкласс / реализовать их, чтобы я мог настроить их для своего проекта. Это общепринятый способ настройки таблиц (подклассы «базовых» классов JTable), или они достаточно мощные, чтобы поддерживать создание таблиц любого типа?

1 Ответ

2 голосов
/ 16 августа 2011

Обычно вы просто определяете TableModel (путем подкласса AbstractTableModel) и создаете экземпляр JTable с этой табличной моделью в качестве аргумента.

Если вы правильно внедрили getColumnClass() в вашу табличную модель, JTable автоматически выберет подходящий рендерер для каждого столбца.Если некоторые ячейки доступны для редактирования (вы указываете переопределение isCellEditable() в табличной модели), соответствующий редактор ячеек также будет связан со столбцом.Вам нужно будет инициировать события (используя один из методов fireXxx в AbstractTableModel) при изменении модели.

Конечно, если у вас есть специальные объекты в ваших ячейках (то есть что-то отличное от String, Boolean, Integer,и т. д.), вам придется связать визуализатор со столбцом (и редактором, если ячейки в этих ячейках доступны для редактирования).Это делается путем установки рендерера / редактора в столбце модели столбца.Однако модель столбца автоматически создается JTable из модели таблицы.Обычно вам не нужно создавать его самостоятельно.

Итак, чтобы ответить на ваши конкретные вопросы:

  1. TableModel используется для хранения данных, отображаемых в JTable.Вы должны реализовать это самостоятельно.TableColumnModel автоматически создается JTable и обычно используется для привязки рендерера и редактора к определенным столбцам.
  2. Если вам нужен определенный рендерер для n-го столбца, вы получите n-й столбец из модели столбца JTableи вы устанавливаете рендер в этом столбце.
  3. Обычно достаточно подкласса AbstractTableModel.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...