在没有渲染器的情况下在JTable中绘制单个单元格(或单个行)

时间:2011-07-15 11:38:43

标签: java swing jtable render

我有一个JTable,当输入的值高于某个值时,我想要一个红色的单元格(或其行)。我正在检查它进入TableModelListener以检测TableChange,所以我看不到在渲染器上对表进行着色的方法(但我确信它是可能的,只有我不知道)。

我也看到了this question,但我不知道如何使用它。

2 个答案:

答案 0 :(得分:1)

您可以看到prepareRendered

here作业

答案 1 :(得分:0)

以下是针对单个表格单元格,您可以将其扩展为行:

首先获取要制作的表格列,然后按如下方式添加TableCellRenderer

    TableColumnModel columnModel = myTable.getColumnModel();
    TableColumn column = columnModel.getColumn(5); // Give column index here
    column.setCellRenderer(new MyTableCellRenderer());

创建实现TableCellRenderer的MyTableCellRendere类并扩展JLabel(以便我们可以为它提供背景颜色)。它看起来像下面这样:

public class MyTableCellRenderer extends JLabel implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row,
            int col) {
        JLabel jLabel = (JLabel) value;
        setBackground(jLabel.getBackground());
        setForeground(UIConstants.black);
        setText(jLabel.getText());
        return this;
    }
}

现在,在您正在监听表格单元格值更改的方法中执行以下操作:

JLabel label = new JLabel(changedValue);
// check for some condition
label.setBackground(Color.red); // set color based on some condition
myTable.setValueAt(label, 0, 5); // here 0 is rowNumber and 5 is colIndex that should be same used to get tableColumn before.