Tôi có một số JTable
và muốn cho phép bỏ chọn tất cả các hàng bằng cách nhấp vào một phần trống của bảng. Điều này hoạt động tốt cho đến nay. Tuy nhiên, mặc dù tôi gọi table.clearSelection();
bàn vẫn cho thấy một đường viền xung quanh tế bào kích hoạt trước đó (xem tế bào trong ví dụ):JTable: Xóa đường viền quanh ô khi xóa lựa chọn hàng
Tôi muốn thoát khỏi biên giới này là tốt (nó trông đặc biệt không phù hợp với giao diện và cảm nhận bản địa của Mac, nơi các tế bào đột nhiên chuyển sang màu đen).
Hoàn toàn làm việc tối thiểu mã ví dụ:
public class JTableDeselect extends JFrame {
public JTableDeselect() {
Object rowData[][] = { { "1", "2", "3" }, { "4", "5", "6" } };
Object columnNames[] = { "One", "Two", "Three" };
JTable table = new JTable(rowData, columnNames);
table.setFillsViewportHeight(true);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (table.rowAtPoint(e.getPoint()) == -1) {
table.clearSelection();
}
}
});
add(new JScrollPane(table));
setSize(300, 150);
}
public static void main(String args[]) throws Exception {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
new JTableDeselect().setVisible(true);
}
}
[sửa] Đã cố thêm table.getColumnModel().getSelectionModel().clearSelection();
được đề cập ở đây xung quanh. Nhưng điều này không giúp được gì.
Cảm ơn! Đơn giản và hiệu quả! – qqilihq
@qqilihq, điều này giả định tất cả dữ liệu trong bảng sử dụng cùng trình kết xuất đồ họa. Để có giải pháp tổng quát hơn, ngoài việc xóa lựa chọn, bạn cần đặt lại các chỉ mục neo/chì của mô hình lựa chọn. Sau đó, bạn không cần một trình kết xuất tùy chỉnh. – camickr
@camickr: cảm ơn vì điều này. 1+ cho câu trả lời của bạn –