IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTabbedPane]Refresh spécifique


Sujet :

Composants Java

  1. #1
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut [JTabbedPane]Refresh spécifique
    Hello,

    J'ai créer une appli qui permet (entre autre) de visualiser des dossiers de client. Pour cette visualisation j'utilise un JTabbedPane, un onglet représentant un dossier de client...Le panel destiné à afficher le dossier client se nomme InterfaceClient, et il possède enormément de composant swing, dont notament des JPanel avec des images en fond...Ces derniers demande bcp de ressources, et au bout d'une vingtaine de dossier ouvert, j'ai un OutOfMemory...Jusque la ca va?

    Pour palier a ce problème, un forumeur, Bulbo pour ne pas le citer , m'a conseiller la chose suivante.
    En gros il suffirait de créer un seul InterfaceClient, que je mettrais a jour avec un setClient(Client client) au fur et à mesures des ouvertures des dossiers,...et en gros le principe serait :
    -j'ouvre un dossier, si il y en avait deja un d'ouvert, je prend l'onglet correspondant et je lui file un Panel simple (java.awt.Panel, par exemple), ensuite j'ajoute mon nouvel onglet avec l'interfaceClient mise à jour...bref le procédé est simple et presk mis en place.

    D'ailleurs quand j'affiche sur la console l'etat des components contenu dans le tabbedPane, il ressort exactement ce que je veux...Seul hic, car il y a un hic, c'est que le tabbedPane refuse de s'afficher correctement.
    Dans le sens ou le 1er dossier ouvert s'affiche correctement, et le 2nd s'affiche comme si cela etait un panel simple...hors le component contenu dans l'onglet en question est bien un InterfaceClient...pour que l'affichage se fasse correctement il faut que je clic à la main sur un des autres onglets ouverts...puis ke je reclic sur l'onglet que je voulais afficher au départ...et la c ok...je sais pas si je suis tres clair...donc pour conclure cela je vais mettre un bout de code, la methode sert a ajouter un onglet au tabbedPane, en fonction d'un client :
    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
     
    int tabSelected = -1;
    InterfaceClient _interfaceClient;
     
    public void addFolder(Client client) {
       if (tabSelected != -1) _tabbedPane.setComponentAt(tabSelected, new java.awt.Panel());
     
       _interfaceClient.setClient(client);
       int i = _clientFolder.indexOf(client);
       if (i == -1) {
          _clientFolder.add(client);
          tabSelected = _tabbedPane.getTabCount();
          _tabbedPane.addTab(client.toString(), _interfaceClient);
          //j'ajoute a la fin
       } else {
          _tabbedPane.setComponentAt(i, _interfaceClient);
          tabSelected = i;
          //je selectionne le pane i
       }
       _tabbedPane.setSelectedIndex(tabSelected);
     
       //Ici je tente tout ce que je peux pour repeindre le tabbedPane, mais rien ne passe
       /*	_tabbedPane.updateUI();
    	_interfaceClient.updateUI();
    	_tabbedPane.validate();*/
       /*	_tabbedPane.revalidate();
    	_tabbedPane.repaint();
    	_interfaceClient.validate();
    	_interfaceClient.repaint();*/
       repaint();
       updateUI();
     
       //Ici l'affichage dans la console est ce que j'attends.
       for (int z = 0; z < _tabbedPane.getTabCount(); z++) 
          System.out.println("Component "+z+" "+((z == tabSelected)?"selected":"")+" : "+_tabbedPane.getComponentAt(z).getClass());
    }
    voila merci déjà d'avoir lu juske la...et merci d'avance si vous y répondé
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    salut!

    ecoute je vois que tu a essayer pas mal de choze ... sof une seule...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabbedPane.setVisible(true);
    Je suis pas sur ke ca fonctionne mais essaye qd mm.
    Les PCs c'est pas fait que pour jouer!

  3. #3
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    nope, ca ne marche pas non plus ...
    mais merci d'avoir lu et répondu
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  4. #4
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    j'ai trouvé, soit au pif mais g trouvé, et si ca peut éviter à qq1 de faire du gachis de mémoire, voila le code :
    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
     
    int tabSelected = -1; 
    InterfaceClient _interfaceClient; 
     
    public void addFolder(Client client) { 
       _tabbedPane.setVisible(false);
       if (tabSelected != -1) _tabbedPane.setComponentAt(tabSelected, new java.awt.Panel()); 
     
       _interfaceClient.setClient(client); 
       int i = _clientFolder.indexOf(client); 
       if (i == -1) { 
          _clientFolder.add(client); 
          tabSelected = _tabbedPane.getTabCount(); 
          _tabbedPane.addTab(client.toString(), _interfaceClient); 
          //j'ajoute a la fin 
       } else { 
          _tabbedPane.setComponentAt(i, _interfaceClient); 
          tabSelected = i; 
          //je selectionne le pane i 
       } 
       _tabbedPane.validate(); 
       _tabbedPane.setSelectedIndex(tabSelected); 
       _tabbedPane.setVisible(true);
    }
    voila et avec ca, ma mémoire, c'est du béton...
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20
  2. Protocole réseau spécifique
    Par cedricgirard dans le forum Développement
    Réponses: 3
    Dernier message: 27/10/2003, 08h57
  3. Liste des tables d'une bases de données spécifique
    Par faridos23 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2003, 22h20
  4. Réponses: 2
    Dernier message: 23/12/2002, 20h34
  5. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo