【问题标题】:find next occurence of tree node in java swing在java swing中找到下一个出现的树节点
【发布时间】:2012-09-17 11:38:21
【问题描述】:

我有一个 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;

}

【问题讨论】:

    标签: java swing jtree


    【解决方案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的逻辑,没那么难。

    添加节点列表作为您的类成员,当您单击按钮时检查它是否为空,如果是,则检索列表,获取第一个节点;用它做任何你想做的事情并将其从列表中删除。当您到达最后一个元素时,将列表再次设置为空。

    【讨论】:

    • 没有理由将节点添加到util.List中,因为所有元素都存储在DefaultTreeModel中,
    • @mKorbel:也许ListMapcache 找到了以后导航的节点?
    猜你喜欢
    • 2020-11-26
    • 2012-09-09
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多