Java Swing JTree:如何更改对最后创建的节点的焦点

问题描述 投票:0回答:1

我的项目中有一个Swing Jtree。我有一个addNewItem方法,该方法允许创建一个新节点。问题是如何在如图所示自动创建新节点之后立即将焦点从当前元素更改为最后创建的节点?

enter image description here

public void addNewItem(){
        DefaultMutableTreeNode node = ((DefaultMutableTreeNode)getTree().getLastSelectedPathComponent());
        if(node==null) return;
        Holder h_node   = (Holder) node.getUserObject();
        String key = h_node.getData().getClass().getSimpleName();
        BaseNodeAdapter adp = BaseNodeAdapter.of(key, h_node.getData());
        while(adp==null && node!=null){
            node = (DefaultMutableTreeNode) node.getParent();
            h_node   = (Holder) node.getUserObject();
            key = h_node.getData().getClass().getSimpleName();
            adp = BaseNodeAdapter.of(key, h_node.getData());
        }
        if(adp==null) return; // no adapter

        System.out.println("addNewItem: adapter "+adp.getClass().getSimpleName());

        String[] selectable = adp.getSelectable();
        if(selectable.length==0) return; // no selectable
        String strPath = Tools.getPath(node);
        String type = (String)JOptionPane.showInputDialog(this,L("Create_a_new_item_for")+" "+key+":",strPath,JOptionPane.QUESTION_MESSAGE,null,selectable,null);
        if(type!=null){
            int res = adp.addItem(type);
            System.out.println("add item : "+res);
            if(res==BaseNodeAdapter.FAILED) return; // nothing
            if(res==BaseNodeAdapter.PARENT) rebuildNode((DefaultMutableTreeNode) node.getParent());
            else rebuildNode(node);
        }

    }
java swing user-interface jtree
1个回答
0
投票

类似:

TreePath current = new TreePath(nodeYouJustCreated.getPath());
tree.setSelectionPath( current );
© www.soinside.com 2019 - 2024. All rights reserved.