Détection de modification de donnée dans un onglet tab

Résolu
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012 - 6 juil. 2012 à 10:47
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 - 17 juil. 2012 à 11:04
Bonjour,

Mon programme permet de gérer des onglets et d'afficher des données contenues dans des JTable.
Mon but serait de modifier le nom de mes onglets en ajoutant une * lorsque le contenu d'un onglet est modifié.
Les onglets peuvent contenir des structures de données différentes et l'idéal serait donc d'utiliser un Listener (à priori) de façon générique.

J'ai fouillé sur le net mais j'arrive pas à trouver d'exemple similaire. Un idée ?

32 réponses

Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
16 juil. 2012 à 09:31
En regardant ton exemple je constate que je fais quelque chose de similaire....

La différence vient que ma méthode pour changer le nom se trouve dans ma classe MyTabbedPane (héritant de JTabbedPane) et non pas dans ma classe TabComponent (héritant de JPanel)

Mon problème vient peut être de la non ? (Malgré que je modifie quand même le titre dans ma JTabbedPane...)
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 12
16 juil. 2012 à 11:28
je ne pense pas car au final, j'appelle bien celle de JTabbedPane...

tu as réécris la méthode setTitleAt(int, String) du JTabbedPane? si oui, n'oublie pas d'appeler la méthode mère:
super.setTitleAt(int, String);
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
16 juil. 2012 à 11:46
Non j'ai pas réécris cette méthode. J'ai fait ceci :

   public void changeTitle(){
    	int current_tab = super.getSelectedIndex();
    	
if (!super.getTitleAt(current_tab).substring(0, 1).equalsIgnoreCase("*")){
String title = super.getTitleAt(current_tab);
System.out.println("Title tab (getTitleAt) : "+title);
title = "* " + title;
super.setTitleAt(current_tab,title);

for(int i = 0; i < super.getTabCount(); i++){
System.out.println("Title tab after_setTitleAt : "+super.getTitleAt(i));
}
        }
    }


Ce qui me surprends c'est que le titre de mon onglet dans ma JTabbedPane se modifie bien mais pas dans l'affichage....
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
16 juil. 2012 à 14:36
Bon je pense avoir trouvé mon erreur ><.

A la fin de ma fonction j'avais oublié de rajouter :
super.add(this.getComponentAt(current_tab), title);

Maintenant le nom modifié s'affiche mais ça me supprime la croix pour fermer l'onglet
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 12
16 juil. 2012 à 16:54
change cette ligne
if (!super.getTitleAt(current_tab).substring(0, 1).equalsIgnoreCase("*")){

par
if (!super.getTitleAt(current_tab).startsWith("*")){


et si tu ne réécris pas les méthodes, pas besoin de mettre super. devant le getTitle ou le setTitle ou encore le getSelectedIndex

Sinon comme ça je ne vois pas le probleme... mais en théorie, tu ne dois pas à chaque fois que tu changes le titre de ton onglet, rajouter le composant... sinon tu risques après un (long) certain temps, de faire sauter ta mémoire...
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
17 juil. 2012 à 10:23
Merci pour le conseille .

Bon j'ai décidé de tester en implémentant la méthode de changement de nom dans ma classe TabComponent (comme dans ton exemple) et ça change bien le nom de mon onglet. Enfin ça ajoute le nom modifier à la fin surement parce-que j'ajoute un nouveau label...

	public void TabPane(int pIndex, MyTabbedPane pane) {

      setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
      this.pane = pane;
      index = pIndex;
      String title = pane.getTitleAt(pIndex);
              title = "* " + title ;
  
      pane.setTitleAt(index, title);
      name = title;
      JLabel label = new JLabel(title);
      add(label);
    }


et voici le rendu visuel : onglet
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 12
17 juil. 2012 à 10:33
pourquoi ajoutes-tu ce label?
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
17 juil. 2012 à 10:44
sinon ça me rajoute pas le titre dans l'onglet visuellement...
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 12
17 juil. 2012 à 10:49
j'avoue que je ne vois pas ou est le problème...
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
17 juil. 2012 à 10:54
Bon j'ai trouvé \o/.
Effectivement c'était pas malin de ma part d'instancier un nouveau JLabel. J'ai juste eu à déclarer le JLabel en private au sein de ma classe pour pouvoir modifier le titre sans problème.
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
17 juil. 2012 à 10:58
D'ailleurs merci infiniment pour ton aide. Tes questions et exemples mon permis de me mettre sur la voie
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 12
17 juil. 2012 à 11:04
tant mieux si tu y es arrivé alors ^^
0