Re: Programmatically select a node after being created

2018-04-16 Thread Marco Rossi
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 
>  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  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



Re: Programmatically select a node after being created

2018-04-14 Thread Emilian Bold
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  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



-
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