Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1139 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] réafficher une ancienne selection dans un JTree

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] réafficher une ancienne selection dans un JTree

n°285740
candide2
Posté le 14-01-2003 à 08:27:36  profilanswer
 

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 ?????

mood
Publicité
Posté le 14-01-2003 à 08:27:36  profilanswer
 

n°285785
BifaceMcLe​OD
The HighGlandeur
Posté le 14-01-2003 à 10:29:38  profilanswer
 

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()) ?

n°285788
candide2
Posté le 14-01-2003 à 10:33:57  profilanswer
 

Oui désolé, je voulais dire que les noeuds ne sont pas surlignés.

n°285797
BifaceMcLe​OD
The HighGlandeur
Posté le 14-01-2003 à 10:42:51  profilanswer
 

Pas de souci, en fait c'est moi qui ne sais pas lire, c'était clair dans le premier post.

n°285856
western
AJMM
Posté le 14-01-2003 à 12:23:31  profilanswer
 

ton repaint, tu le fais comment? Dans un thread? Dans Action?

n°285872
candide2
Posté le 14-01-2003 à 12:41:48  profilanswer
 

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();
      }
    }

n°285907
western
AJMM
Posté le 14-01-2003 à 13:40:51  profilanswer
 

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() ...

n°285959
HappyHarry
Posté le 14-01-2003 à 14:14:47  profilanswer
 

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 ? :o

n°286001
BifaceMcLe​OD
The HighGlandeur
Posté le 14-01-2003 à 14:48:59  profilanswer
 

Tu veux invalidate(), non ? (de la même classe java.awt.Component)

n°286014
candide2
Posté le 14-01-2003 à 15:04:55  profilanswer
 

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...

mood
Publicité
Posté le 14-01-2003 à 15:04:55  profilanswer
 

n°286142
BifaceMcLe​OD
The HighGlandeur
Posté le 14-01-2003 à 16:51:06  profilanswer
 

Moi, j'vous dis, ça sent la séance de débogage du JDK, ça...  :ange:

n°286620
candide2
Posté le 15-01-2003 à 06:48:46  profilanswer
 

je suis perplexe mais je n'ose pas encore mettre en cause le JDK vu mon niveau en Java :lol:

n°287004
western
AJMM
Posté le 15-01-2003 à 18:23:51  profilanswer
 

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!

n°287034
HappyHarry
Posté le 15-01-2003 à 19:17:20  profilanswer
 

western a écrit :

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!


 
je t'ai pas attendu pour étudier tout ca, je me contenterai de ca :
 


public void validate()
 
    Validates this container and all of its subcomponents.
 
    The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.  


 
maintenant si tu as toujours du mal a lire, tu peux toujours te faire aider par ton cher professeur pour te traduire
 

n°287040
--greg--
Posté le 15-01-2003 à 19:25:02  profilanswer
 

[:blueflag] topicalire


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°287050
darklord
You're welcome
Posté le 15-01-2003 à 19:41:43  profilanswer
 

[:cupra]


---------------
Just because you feel good does not make you right
n°287367
western
AJMM
Posté le 16-01-2003 à 10:20:33  profilanswer
 

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 :
  1. /*!
  2.   Cette classe doit permettre de ...
  3. */
  4. import java.io.*;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import javax.swing.*;
  8. import javax.swing.event.*;
  9. public class VerificationValidate
  10. {
  11.     private final static JFrame fenetre = new JFrame();
  12.     private final JLabel label = new JLabel("" );
  13.     static private String contenu_label = new String();
  14.     private JProgressBar pb = new JProgressBar(0, 1000);
  15.     static private int valeur_pb = 0;
  16.     private JButton annuler = new JButton("Cancel" );
  17.     static private boolean valeur_annuler = false;
  18.    
  19.     private void construitFenetre()
  20.     {
  21. Container cp = fenetre.getContentPane();
  22. cp.removeAll();
  23. cp.setLayout(new GridBagLayout());
  24. label.setText(contenu_label);
  25. constrain(cp,label,0,0,1,1,GridBagConstraints.HORIZONTAL,GridBagConstraints.CENTER,1.0,1.0,0,0,0,0);
  26. constrain(cp,pb,0,1,1,1,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1.0,1.0,0,0,0,0);
  27. constrain(cp,annuler,0,2,1,1,GridBagConstraints.NONE,GridBagConstraints.CENTER,1.0,1.0,0,0,0,0);
  28. fenetre.setSize(400, 100);
  29. fenetre.addWindowListener(new WindowAdapter()
  30.     {
  31.  public void windowClosing(WindowEvent e)
  32.  {
  33.      valeur_annuler = true;
  34.  }
  35.     });
  36. annuler.addActionListener(new ActionListener()
  37.     {
  38.  public void actionPerformed(ActionEvent evt)
  39.  {
  40.      valeur_annuler = true;
  41.  }
  42.     });
  43.     }
  44.     private void constrain(Container container,Component component,int grid_x,int grid_y,int grid_width,int grid_height,int fill,int anchor,double weight_x,double weight_y,int top,int left,int bottom,int right)
  45.     {
  46. GridBagConstraints c = new GridBagConstraints();
  47. c.gridx      = grid_x;
  48. c.gridy      = grid_y;
  49. c.gridwidth  = grid_width;
  50. c.gridheight = grid_height;
  51. c.fill       = fill;
  52. c.anchor     = anchor;
  53. c.weightx    = weight_x;
  54. c.weighty    = weight_y;
  55. if (top+bottom+left+right > 0) c.insets = new Insets(top, left, bottom, right);
  56. ((GridBagLayout)container.getLayout()).setConstraints(component, c);
  57. container.add(component);
  58.     }
  59.    
  60.     public VerificationValidate()
  61.     {
  62. contenu_label = "Preparing...";
  63. valeur_pb = 0;
  64. construitFenetre();
  65. fenetre.show();
  66.     }
  67.     public boolean copier(File file_in, File file_out)
  68.     {
  69. fenetre.setTitle("Copy "+file_in.getName()+" sur "+file_out.getName());
  70. boolean res = true;
  71. long taille_in = file_in.length();
  72. int i = 0;
  73. int j;
  74. try
  75.     {
  76.  BufferedInputStream in = new BufferedInputStream(new FileInputStream (file_in));
  77.  DataOutputStream out = new DataOutputStream(new FileOutputStream(file_out));
  78.  while(
  79.        ((j = in.read()) >= 0)
  80.        &&
  81.        (!valeur_annuler)
  82.        )
  83.      {
  84.   valeur_pb = (int) (1000 * ((double)i++) / ((double)taille_in));
  85.   out.write(j);
  86.   fenetre.validate();
  87.      }
  88.     }
  89. catch(Exception e)
  90.     {
  91.  JOptionPane.showMessageDialog(
  92.           fenetre,
  93.           "Error occurs during copy.",
  94.           "Error:",
  95.           JOptionPane.ERROR_MESSAGE);
  96.  res = false;
  97.     }
  98. return res;
  99.     }
  100.     public static void main(String[]argv)
  101.     {
  102. if(argv.length != 2)
  103.     {
  104.  JOptionPane.showMessageDialog(
  105.           null,
  106.           "Il faut preciser le nom de fichier source et le nom de fichier arriv? ...",
  107.           "Error:",
  108.           JOptionPane.ERROR_MESSAGE);
  109.  System.exit(1);
  110.     }
  111. VerificationValidate vv = new VerificationValidate();
  112. File file_in = new File(argv[0]);
  113. if(! file_in.exists())
  114.     {
  115.  JOptionPane.showMessageDialog(
  116.           null,
  117.           "Le fichier source n'existe pas",
  118.           "Error:",
  119.           JOptionPane.ERROR_MESSAGE);
  120.  System.exit(1);
  121.     }
  122. File file_out = new File(argv[1]);
  123. if(vv.copier(file_in, file_out))
  124.     {
  125.  JOptionPane.showMessageDialog(
  126.           null,
  127.           "La copie: tout va bien",
  128.           "Error:",
  129.           JOptionPane.INFORMATION_MESSAGE);
  130.  System.exit(0);
  131.     }
  132. else
  133.     {
  134.  JOptionPane.showMessageDialog(
  135.           null,
  136.           "La copie: tout va mal ;-)",
  137.           "Error:",
  138.           JOptionPane.ERROR_MESSAGE);
  139.  System.exit(1);
  140.     }
  141.     }
  142. }

 

n°287432
forest
Posté le 16-01-2003 à 11:00:06  profilanswer
 

HappyHarry a écrit :


 
je t'ai pas attendu pour étudier tout ca, je me contenterai de ca :
 


public void validate()
 
    Validates this container and all of its subcomponents.
 
    The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.  


 
maintenant si tu as toujours du mal a lire, tu peux toujours te faire aider par ton cher professeur pour te traduire
 
 


 
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 ?

n°287437
BifaceMcLe​OD
The HighGlandeur
Posté le 16-01-2003 à 11:06:12  profilanswer
 

candide2 a écrit :

je suis perplexe mais je n'ose pas encore mettre en cause le JDK vu mon niveau en Java :lol:


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).

n°287458
western
AJMM
Posté le 16-01-2003 à 11:14:55  profilanswer
 

:lol: bon courage pour la noyade dans les sources de JDK

n°287518
BifaceMcLe​OD
The HighGlandeur
Posté le 16-01-2003 à 12:24:08  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] réafficher une ancienne selection dans un JTree

 

Sujets relatifs
java graphique[java] gestionnaire de mise en page : connaitre la ligne-colonnes
Meilleurs technos Java<SELECT multiple name=truc> comment gérer la selection multiple
java : je cherche un sit pour apprdre les API merci d'avance[Java] JBuilder 7
[JAVA] DS vos tirroirs : Simulateur de mémoire (???)[JAVA] JBuilder 8: j'arrive pas compiler
Java + KDE --> problemes de Frames qui se minimisent dans la barreBenou, Darklord, Greg, ... vous avez créé vôtre site sur Java ?
Plus de sujets relatifs à : [Java] réafficher une ancienne selection dans un JTree


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR