Ok, I decided to subclass my beanTreeView.

public final class LibraryViewerTopComponent extends TopComponent implements 
ExplorerManager.Provider {
        private final ExplorerManager explorerManager = new ExplorerManager();
        private BeanTreeView beanTreeView;
        
        private final class LibraryTreeView extends BeanTreeView implements 
TreeModelListener {
        
                @Override
                protected NodeTreeModel createModel() {
                        NodeTreeModel model = super.createModel();
                        model.addTreeModelListener(this);
                        return model;
                }

                @Override
                public void treeNodesInserted(TreeModelEvent e) {
                        Object[] children = e.getChildren();
                        if (children.length > 0) {
                                TreePath tp = e.getTreePath();
                                
tree.setSelectionPath(tp.pathByAddingChild(children[0]));
                        }
                }

                @Override
                public void treeNodesRemoved(TreeModelEvent e) {
                        // NOP
                }
        
                @Override
                public void treeNodesChanged(TreeModelEvent e) {
                        // NOP
                }

                @Override
                public void treeStructureChanged(TreeModelEvent e) {
                        // NOP
                }
        }
        
        public LibraryViewerTopComponent() {
                initComponents();
                // initialize data model
                …
                …
        }
        
        private void initComponents() {
                beanTreeView = new LibraryTreeView();
                setBackground(java.awt.Color.white);
                setOpaque(true);
                setLayout(new java.awt.BorderLayout());
                add(beanTreeView, java.awt.BorderLayout.CENTER);
        }
        
        @Override
        public ExplorerManager getExplorerManager() {
                return explorerManager;
        }
}

It works but I appreciate any other suggestions/comments.


> Il giorno 14 apr 2018, alle ore 08:56, Emilian Bold 
> <emilian.b...@protonmail.ch> ha scritto:
> 
> I'm also curious about this.
> 
> It seems to me the API is somewhat incomplete, specifically in the async 
> area. We have no Future to listen to and react. So, it's all fire-and-forget 
> when often times you want to do something after the node has been created / 
> shown.
> 
> In your case you control the beanTreeView so as a last resort I guess you 
> could subclass the view and listen on the JTree directly (it's a protected 
> field). Still... it's ugly.
> 
> Not really sure if there's some other way. If you do find it, please come 
> back on the mailing list and let us know.
> 
> --emi
> 
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> 
> On 13 April 2018 12:28 PM, Marco Rossi <ma...@markreds.it> wrote:
> 
>> Hi there,
>> 
>> can someone tell me how to programmatically select a node in my beanTreeView 
>> (backed up by an explorerManager) after being created in my data model? I 
>> tried to do this in parent node, by adding a NodeListener like this:
>> 
>> parentNode.addNodeListener(new NodeAdapter() {
>> 
>> @Override
>> 
>> public void childrenAdded(NodeMemberEvent ev) {
>> 
>> if (ev.isAddEvent()) {
>> 
>> final Node node = ev.getNode();
>> 
>> SwingUtilities.invokeLater(new Runnable() {
>> 
>> @Override
>> 
>> public void run() {
>> 
>> try {
>> 
>> LibraryViewerTopComponent.findInstance().getExplorerManager().setSelectedNodes(new
>>  Node[] { node });
>> 
>> } catch (PropertyVetoException ex) {
>> 
>> MessageBox.error(ex);
>> 
>> }
>> 
>> }
>> 
>> });
>> 
>> }
>> 
>> }
>> 
>> });
>> 
>> When I create a new item in my data model, the ChildFactory refreshes 
>> asynchronously itself and creates a new node representing the data. 
>> Unfortunately this does’t work because the child node may be not exists yet 
>> in the explorer manager. Any suggestions?


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@netbeans.apache.org
For additional commands, e-mail: users-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to