accarvajal
asked on
JTree Deleting painting problem
Hi!
I'm using a JTree component, and when I remove all nodes or replace them by using TreeModel, texts painted on JTree and used by nodes continues showing on JTree, is like remove them need to be repainted or another thing. I Tried .Repaint() but nothing happen, Thanks for your help on solving this problem!
I'm using a JTree component, and when I remove all nodes or replace them by using TreeModel, texts painted on JTree and used by nodes continues showing on JTree, is like remove them need to be repainted or another thing. I Tried .Repaint() but nothing happen, Thanks for your help on solving this problem!
you need your tree model to fire the appropriate event to inform listeners of what has been removed.
ASKER
All nodes are well removed, the only problem is continues showing just text and images on screen, but internally nodes no longer exists. So, still is necessary to fire event?
yes, whenever you change the model it needs to fire an event'
ASKER
Ah! but I use a class Arbol derived from JTree and super constructor calling new DefaultTreeModel(...), since I don't use my own treemodel, So in this case how is it?
doesn't matter whose tree model you use, that tree model needs to fire the event.
how do u remove nodes from model?
how do u remove nodes from model?
ASKER
rootNode.removeAllChildren ();
treeModel.reload();
Is there anything wrong here?
treeModel.reload();
Is there anything wrong here?
instead of reload() i'd call
treeModel.nodeStructureCha nged(rootN ode);
treeModel.nodeStructureCha
ASKER
So!, code would be :
rootNode.removeAllChildren ();
treeModel.nodeStructureCha nged(rootN ode);
and I add event methods for listening Remove, Add, and Change, is this so?
rootNode.removeAllChildren
treeModel.nodeStructureCha
and I add event methods for listening Remove, Add, and Change, is this so?
nodeStructureChanged() will fire events to the listeners
ASKER
Ok, I'll put this code, and I'll comment you, if it works, thanks
ASKER
No!, it didn't work, I did this:
public class Arbol extends JTree {
private DefaultTreeCellRenderer m_objTreeRender = null;
private DefaultMutableTreeNode m_rootNode = null;
public Arbol(DefaultMutableTreeNo de rootNode,
boolean bEditable) {
super(new DefaultTreeModel(rootNode) );
setEditable(bEditable);
getSelectionModel().setSel ectionMode (
TreeSelectionModel.SINGLE_ TREE_SELEC TION);
setShowsRootHandles(true);
m_objTreeRender = new DefaultTreeCellRenderer();
m_rootNode = rootNode;
}
public void EliminarTodosLosNodos() {
setExpandedState(getPathFo rRow(0), false);
m_rootNode.removeAllChildr en();
getTreeModel().nodeStructu reChanged( m_rootNode );
// getTreeModel().reload();
}
}
in main class:
TreeModelListener evArbol = new TreeModelListener() {
public void treeNodesChanged(TreeModel Event e) {
}
public void treeNodesInserted(TreeMode lEvent e) {
}
public void treeNodesRemoved(TreeModel Event e) {
}
public void treeStructureChanged(TreeM odelEvent e) {
}
public DefaultTreeModel getTreeModel() {
return (DefaultTreeModel)getDefau ltTreeMode l();
}
};
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Co mponents") ;
m_treeComponentes = new Arbol(rootNode, false);
m_treeComponentes.addMouse Listener(e vMouseArbo l);
m_treeComponentes.getTreeM odel().add TreeModelL istener(ev Arbol);
When I create these nodes:
- Components
- Add node
- Add Item
- Delete Item/node
JTree shows nodes fine! but then I need to recharge with new nodes like this:
- Components
- Add Menu
- Add Menu Item
- Delete Menu/Item
I call EliminarTodosLosNodos() first and then I create new nodes but not using constructor else createNewNodes method. when it is finished JTree shows me:
- Components
- Add node
- Add Item
- Delete Item/node
What happened about 'Add Menu', 'Add Menu/Item', 'Delete Menu/Item'
public class Arbol extends JTree {
private DefaultTreeCellRenderer m_objTreeRender = null;
private DefaultMutableTreeNode m_rootNode = null;
public Arbol(DefaultMutableTreeNo
boolean bEditable) {
super(new DefaultTreeModel(rootNode)
setEditable(bEditable);
getSelectionModel().setSel
TreeSelectionModel.SINGLE_
setShowsRootHandles(true);
m_objTreeRender = new DefaultTreeCellRenderer();
m_rootNode = rootNode;
}
public void EliminarTodosLosNodos() {
setExpandedState(getPathFo
m_rootNode.removeAllChildr
getTreeModel().nodeStructu
// getTreeModel().reload();
}
}
in main class:
TreeModelListener evArbol = new TreeModelListener() {
public void treeNodesChanged(TreeModel
}
public void treeNodesInserted(TreeMode
}
public void treeNodesRemoved(TreeModel
}
public void treeStructureChanged(TreeM
}
public DefaultTreeModel getTreeModel() {
return (DefaultTreeModel)getDefau
}
};
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Co
m_treeComponentes = new Arbol(rootNode, false);
m_treeComponentes.addMouse
m_treeComponentes.getTreeM
When I create these nodes:
- Components
- Add node
- Add Item
- Delete Item/node
JTree shows nodes fine! but then I need to recharge with new nodes like this:
- Components
- Add Menu
- Add Menu Item
- Delete Menu/Item
I call EliminarTodosLosNodos() first and then I create new nodes but not using constructor else createNewNodes method. when it is finished JTree shows me:
- Components
- Add node
- Add Item
- Delete Item/node
What happened about 'Add Menu', 'Add Menu/Item', 'Delete Menu/Item'
ASKER
Sorry!, I made a mistake:
public DefaultTreeModel getTreeModel() {
return (DefaultTreeModel)getDefau ltTreeMode l();
}
is into Arbol class not in main class
public DefaultTreeModel getTreeModel() {
return (DefaultTreeModel)getDefau
}
is into Arbol class not in main class
It would seem far simpler to use a different model instead of updating the existing one.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
objects! excuse me could you please show me a little sample about you telling me.
Naeemq, Let me try your advice!
Naeemq, Let me try your advice!
create a new model and use the tables setModel() method to change the tree