如何在悬停在另一个单元格上时删除JTable单元格bgColor?

时间:2010-07-05 09:32:15

标签: java colors jtable cell

我为JTable列创建了自己的TableCellEditor,以便在编辑此列的单元格时执行一些特殊操作。

在那个TableCellEditor中,我在该列中的单元格悬停时定义颜色,如下所示:

public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {  
    if( isSelected )  // User clicked on this cell.
        setBackground( selectedRowBG );
    else if( rowIndexToHighlight == row  )  // user is hovering on this cell.
        setBackground( hoveredRowBG );
    else  // Set default cell color.
        setBackground( unHoveredRowBG );

    return this;
}

我的问题是,当我将鼠标悬停在该特殊列中的单元格上时,单元格背景颜色变为“hoveredRowBG”,然后如果我将鼠标移动到另一列中的单元格或移动到表格中的空白区域(没有行),特殊单元格bgColor仍然具有“hoveredRowBG”颜色。  我希望在发生此类操作时删除悬停的颜色。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

只需将实际突出显示的行存储在某处并在悬停时测试,如果已更改。如果是,则取消突出显示最后突出显示并存储实际值。 lastHighlightedRow是我示例中的一个字段,您可能需要另一个地方来存储该值。

public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {  
    if( isSelected )  // User clicked on this cell.
        setBackground( selectedRowBG );
    else if( rowIndexToHighlight == row  ) {  // user is hovering on this cell.
        if (!(lastHighlightedRow == this)) {
           lastHighlightedRow.setBackground(unHoveredRowBG);
           lastHighlightedRos = this;
        }
        setBackground( hoveredRowBG );
    }

    return this;
}
相关问题