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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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