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 :
voila merci déjà d'avoir lu juske la...et merci d'avance si vous y répondé
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()); }
Partager