2

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;
 }  

ありがとう!

4

1 に答える 1

0

のメソッドclearSelection()を使用するだけJTreeです。

于 2015-10-26T21:35:42.617 に答える