8

我有一个基本的摇摆 JTable,要求是当单击任何单元格时,应突出显示整行,并且单击的单元格应与突出显示行的其余部分颜色不同。

目前,我将isRowSelectionAllowed 设置true

我尝试使用自定义TableCellRenderer,如下所示:

public class CustomTableCellRenderer extends DefaultTableCellRenderer
{

public static final DefaultTableCellRenderer    DEFAULT_RENDERER    = new DefaultTableCellRenderer();
    @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

    if (isSelected) {
        c.setBackground(Color.red);
    }
    else {
        c.setForeground(Color.black);
        c.setBackground(Color.white);
    }
    return c;   
  }     
}

但这似乎不起作用(整行以红色突出显示)。

我还尝试如下设置 UIManager 属性:

UIManager.put("Table.focusCellBackground", 
         new javax.swing.plaf.ColorUIResource (Color.red));

但这似乎也不起作用(即使当我尝试使用

UIManager.put("Table.focusCellHighlightBorder", 
         new BorderUIResource.LineBorderUIResource(Color.red)); 

效果很好)

您能否提出任何建议,我可能需要做什么?

4

3 回答 3

11

试试这个:

jtable.setCellSelectionEnabled(true);

然后在getTableCellRendererComponent

if (table.isCellSelected(row, column))
    setForeground(Color.red);
else if (table.isRowSelected(row))
    setForeground(Color.green);
else if (table.isColumnSelected(column))
    setForeground(Color.blue);
else
    setForeground(Color.black);

这会将选定的单元格呈现为红色,将行的其余部分呈现为绿色,将列的其余部分呈现为蓝色。注意:单元格选择要求选择模型是单一的,其他选择模型可能会导致不可预知的行为。

于 2011-07-29T03:27:43.437 回答
4

但这似乎不起作用(整行以红色突出显示)。

您需要检查“hasFocus”变量,而不是“isSelected”变量。

另一个替代创建多个自定义渲染器的选择(如果您的表具有不同类类型的列)是使用Table Row Renderering方法。

于 2011-07-28T16:23:50.290 回答
3

您需要为表格关闭行选择并打开单元格选择。然后找到一种方法返回并在需要时突出显示该行。

于 2011-07-28T16:14:34.703 回答