Как удалить bgColor ячейки JTable при наведении курсора на другую ячейку?

Я создал свой собственный TableCellEditor для столбца JTable, чтобы делать некоторые специальные вещи при редактировании ячеек этого столбца.

В этом 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», затем, если я перемещаю мышь в ячейку в другом столбце или перемещаюсь в пустое место в таблице (это не имеет rows), специальная ячейка bgColor по-прежнему имеет цвет hoveredRowBG. Я хочу убрать этот всплывающий цвет, когда происходит такое действие.

Любые идеи?


person Brad    schedule 05.07.2010    source источник


Ответы (1)


Просто сохраните фактическую выделенную строку где-нибудь и проверьте, зависая, изменилась ли она. Если да, снимите выделение с последнего выделенного и сохраните фактическое. 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;
}
person Andreas Dolk    schedule 05.07.2010
comment
Спасибо ... Мой код был немного сложным, поэтому я внес некоторые изменения, чтобы он работал, но это очень полезно. - person Brad; 05.07.2010