Установите цвет столбца и строки JTable с помощью TableCellRender

Мне интересно, могу ли я установить указанный цвет строки и столбца, не определяя свой собственный TableCellRender.

В настоящее время я использую этот код

TableCellRenderer cellRenderer = this.devicePropertyTable.getCellRenderer(1, 1);
Component cellRenderComponent = cellRenderer.getTableCellRendererComponent(this.devicePropertyTable, "", false, false, 1, 1);

if (propertyValue.equalsIgnoreCase("true"))
{
    cellRenderComponent.setBackground(Color.green);
}
else
{
    cellRenderComponent.setBackground(Color.red);
}

Я бы предположил, что это получит средство рендеринга ячеек для узла таблицы 1,1 и окрасит его в соответствующий цвет. Но что произойдет, так это окрасит всю таблицу.

Есть ли другой способ сделать это без создания собственного TableCellRender?


person Chris Watts    schedule 27.07.2011    source источник
comment
пользовательский рендерер - это маленькая монета, предназначенная для... ну... настройки визуальных элементов в компонентах коллекции :-) Если вам нужна более мощная и более подключаемая поддержка, чем ядро ​​Swingx, вы можете взглянуть в SwingX   -  person kleopatra    schedule 28.07.2011


Ответы (2)


EDIT: В этом случае лучше использовать prepareRenderer, как указано в ответе выше.

Вам придется расширить JTable и переопределить

<!-- language: lang-java -->
getCellRenderer(int row, int column)

public class MyTable extends JTable
{
   @Override
   public TableCellRenderer getCellRenderer(int row, int column) 
   {
      return new TableCellRenderer()
      {
          Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus, 
                    int row, int column)
          {
              Component cellRenderComponent = this.MyTable.super.getCellRenderer(row, column);
              if (getModel().getValue(row,column).toString().equalsIgnoreCase("true"))
              {
                  cellRenderComponent.setBackground(Color.green);
              }
              else
              {
                  cellRenderComponent.setBackground(Color.red);
              }

          }
      }
   }

}
person DoubleMalt    schedule 27.07.2011
comment
-1, потому что это просто неправильно (вы точно не хотите сократить поиск в таблице подходящего рендерера) - person kleopatra; 28.07.2011

Мне интересно, могу ли я установить указанный цвет строки и столбца, не определяя свой собственный TableCellRender.

Переопределите метод prepareRenderer(...) JTable.

См. Визуализация строк таблицы, где приведены некоторые примеры для начала работы.

person camickr    schedule 28.07.2011