#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. Спасибо… Мой код был немного сложным, поэтому я внес некоторые правки, чтобы это сработало, но это очень полезно.