1

私はjtreeを持っています。検索ボタンがクリックされたときにツリー内の特定のノードを検索するコードを作成しましたが、そのボタンをもう一度クリックして存在する場合は、次のノードを検索する必要がありますか? 手伝ってくれますか?検索ボタンのコードは

 m_searchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
    DefaultMutableTreeNode node = searchNode(m_searchText.getText());
    if (node != null) {
      TreeNode[] nodes = m_model.getPathToRoot(node);
      TreePath path = new TreePath(nodes);
      m_tree.scrollPathToVisible(path);
      m_tree.setSelectionPath(path);
    } else {
      System.out.println("Node with string " + m_searchText.getText() + " not found");
    }
}

});

検索方法のコードは

public DefaultMutableTreeNode searchNode(String nodeStr) {
DefaultMutableTreeNode node = null;
Enumeration e = m_rootNode.breadthFirstEnumeration();
while (e.hasMoreElements()) {
  node = (DefaultMutableTreeNode) e.nextElement();
  if (nodeStr.equals(node.getUserObject().toString())) {
    return node;
  }
}
return null;

}

4

1 に答える 1

2

1 つのノードだけを返す代わりに、見つかったノードのリストを返します。

public List<DefaultMutableTreeNode> searchNode(String nodeStr) {
DefaultMutableTreeNode node = null;
Enumeration e = m_rootNode.breadthFirstEnumeration();
List<DefaultMutableTreeNode> list = new ArrayList<DefaultMutableTreeNode>();
while (e.hasMoreElements()) {
  node = (DefaultMutableTreeNode) e.nextElement();
  if (nodeStr.equals(node.getUserObject().toString())) {
    list.add(node);
  }
}
return list;
}

ボタンのロジックをActionListener自分で行います。それほど難しくありません。

ノードのリストをクラスメンバーとして追加します。ボタンをクリックすると、null かどうかを確認し、null の場合はリストを取得し、最初のノードを取得します。好きなことをして、リストから削除してください。最後の要素に到達したら、リストを再び null に設定します。

于 2012-09-17T11:51:44.813 に答える