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

#java #colors #jtable #cell

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

Есть идеи?

Ответ №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;
}
  

Комментарии:

1. Спасибо… Мой код был немного сложным, поэтому я внес некоторые правки, чтобы это сработало, но это очень полезно.