réafficher une ancienne selection dans un JTree [Java] - Java - Programmation
Marsh Posté le 14-01-2003 à 10:29:38
Tu dis que les noeuds sélectionnés ne sont pas visibles, mais : cela veut-il dire que les noeuds ne sont simplement pas surlignés, ou qu'ils ne sont carrément pas visibles (auquel cas il faut faire aussi des expand()) ?
Marsh Posté le 14-01-2003 à 10:33:57
Oui désolé, je voulais dire que les noeuds ne sont pas surlignés.
Marsh Posté le 14-01-2003 à 10:42:51
Pas de souci, en fait c'est moi qui ne sais pas lire, c'était clair dans le premier post.
Marsh Posté le 14-01-2003 à 12:23:31
ton repaint, tu le fais comment? Dans un thread? Dans Action?
Marsh Posté le 14-01-2003 à 12:41:48
Je ne comprend pas la question (je débute), le repaint est fait là :
public class MyJPanelVarNames extends javax.swing.JPanel {
JTree vnTree;
String[] tabRecord;
String[][][] tabVarByRec;
int iVarSelectedByRec[];
TreePath[] selectedPathsVarNames;
/** Creates new form MyJPanelVarNames */
public MyJPanelVarNames(JTree pvnTree, String[] ptabRecord, String[][][] ptabVarByRec) {
vnTree = pvnTree;
tabRecord = ptabRecord;
tabVarByRec = ptabVarByRec;
initComponents();
if(WdView.selectedPathsVarNames != null && WdView.FileVarNumber == WdView.tabInfosNumber[2]) {
selectedPathsVarNames = WdView.selectedPathsVarNames;
vnTree.setSelectionPaths(selectedPathsVarNames);
vnTree.repaint();
}
}
Marsh Posté le 14-01-2003 à 13:40:51
En Java, les objets grapiques de javax.swing ne peuvent être modifier qu'avant appel à Windows.show() (ou paint()), ou dans la fonction run d'un thread, ou encore pendant le traitement d'une action (dans la fonction ActionPerformed(Event evt) par exemple). ET NULLE PART AILLEURS ... donc c'est normal que tes selections ne soient pas sous-ligné, le repaint est fait après show() ...
Marsh Posté le 14-01-2003 à 14:14:47
western a écrit : En Java, les objets grapiques de javax.swing ne peuvent être modifier qu'avant appel à Windows.show() (ou paint()), ou dans la fonction run d'un thread, ou encore pendant le traitement d'une action (dans la fonction ActionPerformed(Event evt) par exemple). ET NULLE PART AILLEURS ... donc c'est normal que tes selections ne soient pas sous-ligné, le repaint est fait après show() ... |
et validate() ca sert a quoi ?
Marsh Posté le 14-01-2003 à 14:48:59
Tu veux invalidate(), non ? (de la même classe java.awt.Component)
Marsh Posté le 14-01-2003 à 15:04:55
J'ai fait des essais avec vos observations et je me suis rendu compte que si je fais une nouvelle sélection à la souris et que je rappelle les anciennes avec :
private void jTabbedPane1MouseReleased(java.awt.event.MouseEvent evt) {
vnTree.setSelectionPaths(selectedPathsVarNames);
vnTree.invalidate(); // ou validate ou repaint()
}
le surlignage des nouvelles est complètement supprimé
Apparemment, il y a bien une modification qui se produit mais pas vraiment celle que je cherche...
Marsh Posté le 14-01-2003 à 16:51:06
Moi, j'vous dis, ça sent la séance de débogage du JDK, ça...
Marsh Posté le 15-01-2003 à 06:48:46
je suis perplexe mais je n'ose pas encore mettre en cause le JDK vu mon niveau en Java
Marsh Posté le 15-01-2003 à 18:23:51
Bon, HappyHarry, explique comment tu fais alors!!!
Mettre en cause JDK? les mecs qui le font sont de loin meilleurs que nous alors avant de mettre en cause, étudie!
Les slides de mon prof de Java sont plus explicites que moi: http://users.info.unicaen.fr/~sauv [...] threads.ps
Dans cette doc. regarde la partie GUI ...
Bonne lecture!
Marsh Posté le 15-01-2003 à 19:17:20
western a écrit : Bon, HappyHarry, explique comment tu fais alors!!! |
je t'ai pas attendu pour étudier tout ca, je me contenterai de ca :
|
maintenant si tu as toujours du mal a lire, tu peux toujours te faire aider par ton cher professeur pour te traduire
Marsh Posté le 15-01-2003 à 19:25:02
topicalire
Marsh Posté le 15-01-2003 à 19:41:43
Marsh Posté le 16-01-2003 à 10:20:33
D'accord, ce qu'ils disent est beau ... si j'ai bien compris, tu utilise cette méthode! Dans ce cas peux tu me dire pourquoi le code suivant ne marche pas (la barre de défilement ainsi que le contenu du label ne sont mis à jour)?
Code :
|
Marsh Posté le 16-01-2003 à 11:00:06
HappyHarry a écrit :
|
désolé mais je suis d'accord avec western, un repaint() se fait avant un window.show() ! la description de validate ne précise nulle part qu'un repaint() est fait sur les composants du container !
candide2, si tu n'arrives pas à arranger ton pb, tu peux peut-être sauvegarder les éléments surlignés de ton jTree dans un vector, et ensuite quand tu le mets ds les nouveau pane, tu effaces toutes les sélections et tu les remets en utilisant ton vector... ça peut peut-être marcher ?
Marsh Posté le 16-01-2003 à 11:06:12
candide2 a écrit : je suis perplexe mais je n'ose pas encore mettre en cause le JDK vu mon niveau en Java |
Je ne voulais pas dire mettre en cause le JDK. Mais il y a des fois où c'est instructif de savoir comment il fonctionne, de l'intérieur (c'est bien pour cela que ses sources Java sont fournis avec le JDK, d'ailleurs).
Marsh Posté le 16-01-2003 à 12:24:08
Seulement sous débogueur, sinon on ne s'en sort pas...
Swing n'est pas si mal conçu que cela, vous savez, et on s'habitue rapidement à ses différentes couches, vues du débogueur.
Marsh Posté le 14-01-2003 à 08:27:36
Je fais une sélection dans un jTree et je récupère :
selectedPathsVarNames = vnTree.getSelectionPaths();
je la garde en mémoire, j'efface le jTabbedPane1 dans lequel il se trouve.
j'en recrée un nouveau avec le jTree vnTree1
Je voudrais que l'ancienne sélection soit de nouveau visible, je fais :
vnTree1.setSelectionPaths(selectedPathsVarNames);
vnTree1.repaint();
et là pas de surlignement des noeuds anciennements sélectionnés .....
la sélection est bien appliquée car je la récupère avec un getSelectionPaths
mais elle n'est pas visible.
Qu'est ce que j'ai oublié de faire ?????