SelectionListener が添付された JTree があります。リスナーは適切に機能しており、ツリー内のノードをクリックするたびに正しく通知されます。
ただし、ノードが選択されたときに常にハイライトされるとは限りません。実際、ノード上に視覚的な「ブルーボックス」を表示するには、2 回クリックする必要があります。
次のコードで、選択範囲を表示するために 2 回クリックする必要があるのはなぜですか?
JTree の作成
JTree tree = new JTree();
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setDragEnabled(true);
tree.setDropMode(DropMode.ON);
tree.expandRow(0);
tree.setModel(model.getActiveFilterModel());
リスナーの追加
tree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent event) {
JTree tree = (JTree) event.getSource();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode != null) {
model.setSelectedFilter((Filter) selectedNode.getUserObject());
}
}
});
編集:
ツリーで .setModel をもう一度呼び出したときにのみ発生するように見えることを追加したいと思います。