JTable: как добавить данные без отображения? - PullRequest
1 голос
/ 07 октября 2010

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

Как мне этого добиться? Я ищу колонку "призрак".

Ищите какой-то способ хранения постоянных данных, которые временно хранятся в клиентском Java-приложении, а затем загружают их на сервер.

Ответы [ 4 ]

3 голосов
/ 07 октября 2010
  1. Создайте TableModel обычно с двумя столбцами данных
  2. Создание JTable с использованием TableModel
  3. Получить TableColumnModel из JTable
  4. Удалите TableColumn (из TableColumnModel), который вы не хотите отображать в таблице. Это НЕ удалит данные в модели, оно просто не закрасит столбец в представлении таблицы.

Теперь, когда вы хотите сослаться на данные в скрытом столбце, вам нужно получить данные из TableModel, а не из JTable:

Object cellData = table.getModel().getValueAt(...);
2 голосов
/ 07 октября 2010

Было бы полезно посмотреть, как выглядит ваш TableModel, так как мы могли бы дать вам идеи, которые предложат минимальные изменения в вашем текущем дизайне. Однако одним из решений будет создание пользовательского объекта данных, который будет представлять строку в вашей таблице, и ваш TableModel будет использовать его для предоставления правильных данных для каждого столбца, включая изображение, которое вы отображаете в настоящее время.

редактировать:

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

Я бы посоветовал вам создать свой собственный TableModel, расширив AbstractTableModel. Для этого вам просто нужно реализовать три метода:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

Затем вы можете предоставить вспомогательную коллекцию, такую ​​как List, для хранения данных вашей строки. Ваш getRowCount() может вернуть размер списка, ваш getColumnCount() может вернуть 1 для вашего столбца изображения. getValueAt() будет затем возвращать изображение из объекта пользовательских данных, о котором я упоминал выше.

0 голосов
/ 07 октября 2010

Используете ли вы пользовательскую TableModel? Вы можете переопределить getColumnCount() следующим образом:

@Override
public int getColumnCount() {
    return super.getColumnCount() - 1;
}

Таким образом, в вашей модели будет скрыт последний столбец, но вы все равно сможете прочитать его с помощью getValueAt()

0 голосов
/ 07 октября 2010

Необходимо расширить класс AbstractTableModel или DefaultTableModel и переопределить методы getValueAt (строка, столбец) и setValueAt. * ​​1001 *

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