JTable, несколько классов на столбец - PullRequest
0 голосов
/ 23 апреля 2019

Я хотел бы создать таблицу, которая содержит String в 1-й строке и Image в другой.

Я использую это (где я изменяю 2 на 0, чтобы получить StringТаблица).Есть ли способ, которым я мог бы сделать оба?

DefaultTableModel table = new DefaultTableModel(model.getRowCount(),model.getColumnCount()) {
    public Class getColumnClass(int column)
    {
        return getValueAt(2, column).getClass();
    }
};

Table with image

Table with string

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Похоже, что «User1, User2, ...» должны быть заголовками столбцов, а не данными TableModel.

Данные для строк должны быть ImageIcon, а не именем файла.Рендерер НЕ должен читать данные из файла.

Прочтите раздел из учебника Swing по Как использовать таблицы для получения дополнительной информации об основах использования JTable.

Если вам нужны смешанные данные в каждой ячейке, вы можете получить средство визуализации для ячейки, проверив тип класса данных, хранящихся в ячейке.

JTable table = new JTable(data, columnNames)
{
    public TableCellRenderer getCellRenderer(int row, int column)
    {
        int modelColumn = convertColumnIndexToModel(column);                
        Class cellClass = getModel().getValueAt(row, modelColumn).getClass();

        return getDefaultRenderer( cellClass );
    }
};

Конечно, вы бынеобходимо:

  1. убедиться, что значение ячейки не равно нулю
  2. сохранить изображение как ImageIcon, а не строковое имя файла
0 голосов
/ 23 апреля 2019

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

Если вы готовы использовать (или оскорбить, как утверждает Эндрю) JTable дляиметь произвольный рендеринг на основе класса ячейки, вам придется написать свой собственный рендерер.Вы можете основать свой класс на DefaultTableCellRenderer или реализовать свой собственный TableCellRenderer по своему усмотрению.

Затем установите средство визуализации для каждого конкретного типа класса, используя JTable.setDefaultRenderer (обратите внимание, что типичное отображение строк обрабатывается средством визуализации по умолчанию).

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