Установите цвет столбца JTable и строки с помощью TableCellRender - PullRequest
0 голосов
/ 28 июля 2011

Мне интересно, могу ли я установить заданный цвет строки и столбца, не определяя свой собственный 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?

Ответы [ 2 ]

4 голосов
/ 28 июля 2011

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

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

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

1 голос
/ 28 июля 2011

РЕДАКТИРОВАТЬ: Для этого варианта использования лучше использовать 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);
              }

          }
      }
   }

}
...