[JTree][Ajout+Edition] jlabel du renderer trop petit
Salut,
J'ai un petit souci de renderer :
Lorsque j'ajoute un noeud de mon arbre, je lance une édition automatique de ce noeud (qui doit être de la forme attribut:valeur). Apres avoir validé l'édition de ce noeud, je me retrouve avec un jlabel trop petit, et donc trois points de suspension à l'affichage de l'arbre.
Voici mon renderer (qui basiquement ne change que les icones) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
/**TREE RENDERER**/
private class MyRenderer extends DefaultTreeCellRenderer
{
/*Icon tutorialIcon;
public MyRenderer(Icon icon)
{
tutorialIcon = icon;
}*/
public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, sel,expanded, leaf, row,hasFocus);
MyNode nd=(MyNode)value;
Toolkit tk=Toolkit.getDefaultToolkit();
if(!leaf)
{
if(nd.checkIsLocked())
{
setIcon(new ImageIcon(tk.createImage("images/folderLocked.png").getScaledInstance(20, 20, Image.SCALE_SMOOTH )));
setToolTipText(nd.getUserLock());
}
else
{
setIcon(new ImageIcon(tk.createImage("images/folder.jpg").getScaledInstance(20, 20, Image.SCALE_SMOOTH )));
}
}
else
{
if(((MyNode)(nd.getParent())).checkIsLocked())
setIcon(new ImageIcon(tk.createImage("images/fileLocked.jpg").getScaledInstance(20, 20, Image.SCALE_SMOOTH )));
else
setIcon(new ImageIcon(tk.createImage("images/file.jpg").getScaledInstance(20, 20, Image.SCALE_SMOOTH )));
}
return this;
}
} |
La fonction d'ajout du noeud (evenement sur un menu clic droit, se trouvant dans ma frame) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
public void actionPerformed(ActionEvent e)
{
tree.requestFocus();
TreePath path = tree.getSelectionPath();
if(path==null)
return;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
if(node.isLeaf())
{
node=(DefaultMutableTreeNode)(node.getParent());
/*JOptionPane.showMessageDialog(null,LanguageManager.getLocalizedText("ImpossibleAction"),LanguageManager.getLocalizedText("ImpossibleActionTitle"),JOptionPane.ERROR_MESSAGE);
return;*/
}
//DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
if(node==null)
{
////System.out.println("node==null !!");
return;
}
////System.out.println("pas de null");
if(node.toString().contains(XMLTree.SEPARATOR))
return;
MyNode newNode = new MyNode("Title"+XMLTree.SEPARATOR+"Detail",false,tree);
((DefaultTreeModel) tree.getModel()).insertNodeInto(newNode, node, node.getChildCount());
//System.out.println("juste avant unsetFolderAlone");
((MyNode)node).unsetFolderAlone();
tree.expand(node);
newNode=tree.getThisNode(tree.getRoot(),newNode);
tree.startEditingAtPath(new TreePath(newNode.getPath()));
} |
La fonction après édition (evenement qui se trouve dans ma classe étandant l'arbre):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
public void treeNodesChanged(TreeModelEvent e)
{
DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent());
/*
* If the event lists children, then the changed
* node is the child of the node we have already
* gotten. Otherwise, the changed node and the
* specified node are the same.
*/
try
{
if(e.getChildIndices()!=null)
{
int index = e.getChildIndices()[0];
node = (DefaultMutableTreeNode)(node.getChildAt(index));
}
if(node.isLeaf())
{
String[] s = node.toString().split(SEPARATOR);
if(s.length!=2)
{
s=node.toString().split(":");
if(s.length!=2)
{
node.setUserObject("Title"+SEPARATOR+s[0].trim());
}
else
{
node.setUserObject(s[0].trim()+SEPARATOR+s[1].trim());
}
}
else
{
//rien à faire
}
updatePane((MyNode)(node.getParent()));
}
} catch (NullPointerException exc)
{
exc.printStackTrace();
}
//System.out.println("The user has finished editing the node.");
//System.out.println("New value: " + node.getUserObject());
save();
repaint();
} |
Je pensais que le repaint ferait que le jlabel se redimensionnerai bien, mais il n'en est rien.
Comment faire en sorte qu'il se dimensionne bien ?
Merci d'avance
Fred