Я создал свой собственный 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". Я хочу удалить тот колеблющийся цвет, когда такое действие происходит.
Какие-либо идеи?
Просто сохраните где-нибудь выделенную строку и при наведении курсора проверьте, изменилась ли она. Если да, снимите выделение с последнего выделенного и сохраните фактическое. 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;
}