在JTable内的列中着色特定单元格

时间:2012-03-10 21:05:55

标签: java swing jtable tablecellrenderer

好的,我一直在尝试这个过去的露水时间,它变得无望。

所以我想将单元格渲染应用到第二列。

stockTable.setCellRender(jtSpread.getColumnModel().getColumn(1));

调用的方法是setCellRender,它具有以下代码:

public void setCellRender(TableColumn column)
{
    column.setCellRenderer(new cellRenderer(data, rows));
}

我的CellRenderer类包含以下代码:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

  for(int i = 0; i < rows; i++) {
      if(row == i && column == 2) {

      }
  }
  return this;
}

上述情况不完整,一团糟。我的目的是检查每个单元格的条件,如果为真,那么我将返回带有绿色前景的标签。如果为false,则返回前景为红色的标签。我想逐一检查列中的每个单元格,每个条件都特定于每个单元格。

编辑:关于具有其自身条件的每个单元,例如。

第一个单元格的值为600,我想检查数组[0],如果数组[0]的内容更高,我希望单元格为绿色,否则为红色。

第二个单元格的值为626,我想检查数组[1],如果数组[1]的内容更高,我希望单元格为绿色,否则为红色。

我希望针对数组中的所有值继续列中的所有单元格

2 个答案:

答案 0 :(得分:5)

确保您的渲染器扩展了DefaultTableCellRenderer:

CellRenderer extends DefaultTableCellRenderer {
   ...  

然后,getTableCellRendererComponent()可能看起来像这样(每次渲染单元格时都会调用此方法):

public Component getTableCellRendererComponent(JTable table, Object value, 
    boolean isSelected, boolean hasFocus, int row, int column) {

    Component cellComponent = super.getTableCellRendererComponent(
          table, value, isSelected, hasFocus, row, column);
     cellComponent.setForeground(isMyConditionFullfilled(value) ? Color.GREEN : Color.RED);
     return cellComponent;    
}

答案 1 :(得分:1)

您的渲染类必须实现TableCellRender 在渲染类中尝试这个:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JLabel label = new JLabel();
        label.setOpaque(true);
        if (value != null && value.equals("text")) { //Checking if  cell´s values isnt null and the condition is true
            label.setBackground(Color.GREEN);
        }else{
            label.setBackground(Color.RED);
        }
        return label;
    }

渲染将自己检查每个单元格,告诉它如何渲染每个单元格。变量“value”包含每行的值,因此您可以使用它来检查条件。如果列的类型已定义,则转换变量“value”。 例如,如果您的单元格定义了Double类型:

double valDouble = (Double) value;
if (value != null && value == 5.00) { //Checking if  cell´s values isnt null and the condition is true
        label.setBackground(Color.GREEN);
 }else{
        label.setBackground(Color.RED);
  }