JTree を使用する Java アプリケーションを開発しています。アーカイブしたいのは、既に選択されているノードをクリックすると、選択が解除されることです。
私の現在の解決策は、マウス リスナーとツリー選択リスナーを jtree に追加することです。しかし問題は、valueChanged が呼び出されるのは、選択が変更された場合のみである (同じノードを 2 回選択した場合ではない) ことです。これを修正するために、ノードが初めてクリックされたかどうかを示すブール値を追加してから、mouseReleased 関数で選択解除を処理しました。これは機能しますが、問題は、ノードに子があり、それを展開したい場合、ノードの選択が解除され、再度選択されることです(これは望ましくありません)。
どうすればこの問題を解決できますか? すでに選択されているノードを選択解除するより良い方法はありますか?
コード:
public void initComponents()
{
elementsTree.addTreeSelectionListener(this);
elementsTree.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
TreePath tp = elementsTree.getPathForLocation(me.getX(), me.getY());
if (tp != null)
{
if(!nodeSelected && elementsTree.getSelectionModel().isPathSelected(tp) )
{
elementsTree.getSelectionModel().removeSelectionPath(tp);
}
}
nodeSelected = false;
}
});
}
public void valueChanged(TreeSelectionEvent e)
{
nodeSelected = true;
}
ありがとう!