Несколько экземпляров компонентов модели в Java Swing? - PullRequest
1 голос
/ 29 июня 2011

До сих пор у меня были разные классы моделей для соответствующего компонента Java Swing, например, у меня есть несколько TableModel для нескольких JTable. Каждый JTable имеет свой TableModel. TableModel основан на одном объекте (Model), предоставляя все необходимые данные. Примерно так:

public class MyTableModel extends AbstractTableModel {

Model model;

Но теперь я хотел бы внести изменения. Мой интерфейс предлагает возможность нескольких экземпляров Model. Поэтому мой вопрос: что мне делать?

  • создание нескольких объектов из MyTable
  • динамически изменяет текущую ссылку на модель при взаимодействии с пользователем

Итак, основная проблема, с которой я сталкиваюсь: я хочу использовать тот же JTable с тем же TableModel. Должен ли я использовать несколько TableModel или использовать меняющиеся ссылки на источник данных?


Аналогичный вопрос:

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

Должен ли я сейчас:

  • создать несколько объектов компонентов вида? Например, для каждой доступной модели создайте собственный объект JTable, JPanel, JScrollPane?
  • динамически изменяются при прослушивании событий изменения на панели с вкладками - ссылка на модель underyling

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Если структура таблицы остается неизменной (т. Е. Одинаковое количество столбцов, одинаковые заголовки, одинаковые классы столбцов) и изменяется только ее содержимое, следует сохранить тот же экземпляр модели, но изменить данные (и вызвать fireTableDataChanged ). Это будет более эффективным и позволит сохранить текущий порядок столбцов, текущий отсортированный столбец и т. Д.

Если структура таблицы полностью меняется, изменение самой модели, вероятно, будет проще. Вы также можете вызвать fireTableStructureChanged, но Javadoc этого метода говорит:

Это то же самое, что звонить setModel (TableModel) на JTable

Относительно вкладок, то же правило может быть соблюдено.

1 голос
/ 29 июня 2011

Если у вас будет несколько вкладок с другой вкладкой, имеющей другую модель, тогда ответ прост, вам нужны разные таблицы. Как минимум по одному на каждую вкладку.

Опять же, если у вас несколько вкладок, вам также понадобится несколько JScrollPanes и т. Д.

Однако, если у вас будет одно место для таблицы, вы можете избежать использования одной JTable и нескольких моделей, если вы не будете делать что-то свое для таблицы. (См. Комментарий mKorbel). В любом случае вы можете использовать один и тот же JScrollPane.

...