Java JTable TableCellRenderer со столбцом ImageIcon - PullRequest
1 голос
/ 01 декабря 2010

У меня есть таблица с пользовательской моделью таблицы, которая имеет два столбца.Столбец 0 - это класс ImageIcon, а Столбец 1 - это класс String.

public Class<?> getColumnClass(int col) {
    if (col == 0) {
        return ImageIcon.class;
    } else {
        return String.class;
    }
}

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

public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
    public Component getTableCellRendererComponent (JTable table, Object obj, boolean isSelected,     boolean hasFocus, int row, int 
    column)
    {
    Component cell = super.getTableCellRendererComponent(table, 
      obj, isSelected, hasFocus, row, column);
    if(isSelected)
     cell.setBackground(Color.BLUE);
    return cell;
    }
}

Любые идеи о том, как это исправить?

Моя ошибка, она вроде как скрыта:

Когда я определяюновый класс TableCellRenderer, добавляемый в столбцы, чтобы я мог стилизовать ячейки, он перезаписывает класс ImageIcon и устанавливает для него значение String.

Поэтому проблема заключается в том, что при определении этого класса TableCellRendererчтобы стилизовать мою таблицу, столбцы ImageIcon в моей таблице превращаются в строки типа «Файл: ...» вместо действительного значка.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

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

1 голос
/ 01 декабря 2010

Другое возможное решение - просто установить значок самостоятельно.Я не уверен, что это лучшее решение, но оно работает:

   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {
      Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
               column);
      ((JLabel)cell).setIcon((Icon)value);
      ((JLabel)cell).setText("");
      ((JLabel)cell).setHorizontalAlignment(JLabel.CENTER);
      if (isSelected) {
         cell.setBackground(Color.blue);
      } else {
         cell.setBackground(null);
      }
      return cell;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...