Дизайн таблицы Java - PullRequest
       11

Дизайн таблицы Java

0 голосов
/ 03 октября 2008

У меня есть класс таблицы, который создает изменяет таблицу элементов. Я хочу отобразить эти элементы в JTable, используя модель таблицы. Мне модель таблицы принадлежит к моему пакету GUI, но для таблицы нужны модели таблиц, чтобы вызвать изменения, а модели таблиц нужен класс таблиц, чтобы отобразить ее, поэтому я не могу разделить их. если вам нужно сделать это, какую структуру классов вы используете? или у меня поток мыслей, и они принадлежат одному пакету?

Ответы [ 5 ]

2 голосов
/ 03 октября 2008

A TableModel - это адаптер . Я всегда пишу табличную модель для расширений AbstractTableModel и использую ее как закрытый внутренний класс моего класса панели GUI. Вам нужно заполнить только несколько методов: getRowCount, getColumnCount и getValueAt

Ваш класс графического интерфейса должен иметь доступ к некоторому контроллеру , откуда он может заполнить эту информацию. Когда ваш контроллер узнает об обновлениях данных, он должен сообщить вашему классу графического интерфейса, который затем может вызвать AbstractTableModel.fireTableDataChanged или другие подходящие методы.

Никогда не используйте класс DefaultTableModel, потому что тогда вам необходимо синхронизировать данные модели таблицы с данными контроллера. Как я уже сказал, табличная модель представляет собой адаптер, который представляет данные контроллера таким образом, что JTable может понять

1 голос
/ 04 октября 2008

Я настоятельно рекомендую всем, кто занимается значительными разработками на основе таблиц или списков, взглянуть на Glazed Lists - я много лет писал собственные TableModel и CellRenderers, связывался с JGoodies и т. Д. Я наткнулся на GL около года назад, и мое развитие никогда не было таким же - подход Glazed Lists просто поразителен.

GL имеет две характеристики, которые делают его предпочтительным для привязки и обработки данных на основе списка:

  1. Очень, очень легко делать обычные вещи, которые вы хотите сделать
  2. Позволяет делать действительно очень сложные вещи, которые вы, возможно, захотите сделать

Посмотрите и посмотрите, не впечатлены ли вы. Я настоятельно рекомендую поиграть с примерами приложений, а затем посмотреть несколько скриншотов, которые проведут вас через весь процесс кодирования.

1 голос
/ 03 октября 2008

Для меня tablemodel - это часть виджета, то есть GUI. Я не зависел бы от пакета javax.swing в моих классах бизнес-логики.

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

Решение также зависит от размера проекта и может быть намного более сложным, чем это. Например. см. jgoodies binding framework и документы для более абстрактных случаев.

1 голос
/ 03 октября 2008

Модель - это бит, содержащий данные. Следует поддерживать и увольнять слушателей, как это делают такие модели.

Теперь вы можете захотеть, чтобы какое-то делегирование в модели преобразовывало данные или адаптировало тип. Таким образом, у вас есть данные в модельном объекте, которые не обязательно связаны с javax.swing.table. Затем реализуйте TableModel, который делегирует вашей базовой модели. Создайте JTable с этой TableModel, но без ссылки на базовую модель.

0 голосов
/ 03 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...