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) :
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
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 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 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())); }
Je pensais que le repaint ferait que le jlabel se redimensionnerai bien, mais il n'en est rien.
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(); }
Comment faire en sorte qu'il se dimensionne bien ?
Merci d'avance
Fred
Partager