JTable
があり、テーブルの空の部分をクリックしてすべての行を選択解除することができます。これはこれまでのところうまく動作します。しかし、私は、テーブルはまだ(例ではセルを参照してください)以前に有効セルの周囲に境界線を示してtable.clearSelection();
を呼び出すにもかかわらず:JTable:行の選択をクリアするときにセルの周りの境界線を削除する
私は(もこの境界線を取り除くしたいと思いますそれは、Macのネイティブなルックアンドフィールで、セルが突然黒に変わったときに特に外見上のように見えます)。
完全に動作する最低限のコード例:
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);
}
}
[編集]この辺りで述べたtable.getColumnModel().getSelectionModel().clearSelection();
を追加しようとしました。しかし、これはどちらも役に立たない。
ありがとうございました!シンプルで効果的! – qqilihq
@ qqilihqこれは、テーブル内のすべてのデータが同じレンダラーを使用していることを前提としています。より一般的なソリューションでは、選択をクリアするだけでなく、選択モデルのアンカー/リードのインデックスをリセットする必要があります。カスタムレンダラーは必要ありません。 – camickr
@camickr:ありがとう。 1 +あなたの答えに –