2012-03-03 94 views
2

我目前有一个由7列和许多行数据组成的JTable。JTable中列中的颜色单元格

我该如何去关于第7列中每个单元的颜色?我想根据单元格内的数据进行着色。

因此,如果在第7列的单元格之一是说低于0,那么我想红色或如果在第7列的单元格之一大于0,则颜色绿等

谢谢您

+0

@deporter Ehhh ..(耸了耸肩)我只是移动到下一个问题。 – 2012-03-03 22:30:30

+0

@AndrewThompson你是对的。 – Juvanis 2012-03-03 22:32:23

+0

对不起,我刚刚学会了如何并将从现在开始。 – 2012-03-10 21:13:23

回答

4

您可以使用TableCellRenderer为表中的单个单元格创建这些自定义样式。这tutorial详细解释。在该页面上是一个使用颜色渲染器的示例,该渲染器可能是您需要的开始。

2

覆盖,当你初始化表对象prepareRenderer()方法,把你的具体条件语句相应地改变颜色,那么颜色的变化将在你的应用程序,你定义的反映。假设你有一个全球性的JTable变量table,让model是你的DefaultTableModel实例:

table = new JTable(model) 
{ 
    public Component prepareRenderer (TableCellRenderer r, int row, int col) 
    { 
     Component comp = super.prepareRenderer(r, row, col); 
     if (col == 6 && !isCellSelected(row, col)) 
     { 
      if (table.getValueAt(row, col) < 0) 
       comp.setBackground(Color.RED); 
      else 
       comp.setBackground(Color.GREEN); 
     } 
     return comp; 
    } 
}; 

上面的代码检查col == 6,因为你要上色7列,其对应列索引6(从0开始) 。在内部if语句中,它正在检查单元值并相应地更改单元格背景颜色。

+2

虽然可行,但我不会推荐它在这个需要对特定列进行视觉修饰的用例中:这是自定义渲染器设计用来处理的“轻量级”任务。另一方面,表格覆盖是一个“重量级”措施:请记住 - 作为一般规则,JSomething根本不应扩展以满足应用程序需要,它们被设计为可以使用。 – kleopatra 2012-03-04 11:20:01

+0

@kleopatra感谢您的建设性意见。我会尝试将这个评论用于即将发布的问题。 – Juvanis 2012-03-04 13:15:22