Имеет ли эта проверка смысл ?
Код: Выделить всё
if (isSelected || hasFocus) {
checkbox.setBackground(table.getSelectionBackground());
}
Я использовал клавиатуру для перемещения фокуса, но каждый раз выбиралась и выделенная ячейка. В приведенной ниже демонстрации ни одна ячейка не окрашена в желтый цвет, даже если для навигации я использую клавиатуру. Такое ощущение, что выделенный объект является подмножеством выбранного
Код: Выделить всё
package demos.table;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class TableFocusDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Table Focus Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Sample data and column names
Object[][] data = {
{"John", Boolean.TRUE},
{"Alice", Boolean.FALSE},
{"Bob", Boolean.TRUE}
};
String[] columnNames = {"Name", "Active"};
JTable table = new JTable(new DefaultTableModel(data, columnNames));
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JCheckBox checkBox = new JCheckBox();
checkBox.setSelected((Boolean) value);
if (isSelected) {
checkBox.setBackground(table.getSelectionBackground());
} else if (hasFocus) {
checkBox.setBackground(Color.YELLOW); // Different color for focus
} else {
checkBox.setBackground(table.getBackground());
}
return checkBox;
}
});
table.setCellSelectionEnabled(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... t-selected