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] Onglet non selectionnable et non supprimable


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut [JTabbedPane] Onglet non selectionnable et non supprimable
    Salut!

    J'ai un JTabbedPane où chaque onglet est relié à JInternalFrame. Quand je cliques sur une JInternalFrame, je sélectionne l'onglet correspondant. Or, certaines de mes JInternalFrame n'ont pas d'onglet associé.

    Je me demandais donc comment avertir l'utilisateur de ce cas de figure, sans que ce soit trop contraignant.
    J'ai pensé à un onglet spécial contenant un texte d'avertissement qui serait sélectionné dans ce cas précis, mais il faudrait que l'onglet ne puisse pas être supprimé, ni même sélectionné manuellement...

    Cette solution vous semble-t'elle correcte?

    Si oui, comment feriez-vous pour implémenté le comportement que j'ai décrit? (onglet spécial pas sélectionnable, pas fermable, alors que les autres onglets le sont)
    Si non, que feriez-vous à ma place?...

    Merci!

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Bonsoir,

    si je comprends bien, tu voudrais disposer d'un onglet qui ne puisse pas être supprimé, ni sélectionnable "manuellement".
    A mon avis, le plus simple est d'étendre la classe JTabbedPane et de redéfinir le comportement des méthodes de suppression et de sélection :
    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
     
    boolean appelManuel;
     
    public void setSelectedIndex(int index) {
      if (appelManuel || index != INDEX_DE_L_ONGLET_SPECIAL) {
        super.setSelectedIndex(index);
      }
    }
     
    public void setSelectedComponent(Component c) {
      if (appelManuel || indexOfComponent(c) != INDEX_DE_L_ONGLET_SPECIAL) {
        super.setSelectedComponent(c);
      }
    }
     
    public void removeTabAt(int index) {
      if (index != INDEX_DE_L_ONGLET_SPECIAL) {
        super.removeTabAt(index);
      }
    }
     
    public void remove(Component c) {
      if (indexOfComponent(c) != INDEX_DE_L_ONGLET_SPECIAL) {
        super.remove(c);
      }
    }
    La variable appelManuel doit être positionnée à true avant l'appel aux méthodes de sélection pour forcer la sélection de l'onglet par programme.

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ca m'a l'air d'être exactement ce qu'il me faut!
    Merci, je teste ça de suite

    Ca marche nickel!
    Petite précision quand même : je mets la varaible appelManuel à true dans les méthodes de mon MouseListener, et je la remet à false à la fin des méthodes setSelected().

    Voilà les bouts de codes :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
    	private boolean appelManuel = false;
    	[...]
    		this.addMouseListener(new MouseAdapter() {
    			public void mousePressed(MouseEvent me) {
    				if (me.isPopupTrigger()) {
    					checkMenu(me);
    					menu.show(me.getComponent(), me.getX(), me.getY());
    					appelManuel = true;
    					fireSelectIFI();
    				}
    			}
     
    			public void mouseReleased(MouseEvent me) {
    				if (me.isPopupTrigger()) {
    					checkMenu(me);
    					menu.show(me.getComponent(), me.getX(), me.getY());
    					appelManuel = true;
    					fireSelectIFI();
    				}
    			}
    			public void mouseClicked(MouseEvent me) {
    				checkMenu(me);
    				appelManuel = true;
    				fireSelectIFI();
    			}
    		});
     
    	[...]
     
    	public void setSelectedIndex(int index) {
    		if (appelManuel || index != 0) {
    			super.setSelectedIndex(index);
    		}
    		appelManuel = false;
    	}
     
    	public void setSelectedComponent(Component c) {
    		if (appelManuel || indexOfComponent(c) != 0) {
    			super.setSelectedComponent(c);
    		}
    		appelManuel = false;
    	}
     
    	public void removeTabAt(int index) {
    		if (index != 0) {
    			super.removeTabAt(index);
    		}
    	}
     
    	public void remove(Component c) {
    		if (indexOfComponent(c) != 0) {
    			super.remove(c);
    		} 
    	}

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    J'ai parlé un peu vite...
    Mais pas de souci, ça marche! En fait, au lieu de mettre une variable appelManuel qui me dit quand c'est une sélection venant d'un clic de l'utilisateur, j'ai utilisé une variable autoCall qui me dit si c'est un appel venant d'une de mes méthodes de sélection...
    La nuance est minime, mais avec ça, ça marche!

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/12/2011, 10h49
  2. Réponses: 4
    Dernier message: 12/09/2006, 12h09
  3. [swing][jlist] cellule de JList non-selectionnable?
    Par nioukniouk dans le forum Composants
    Réponses: 1
    Dernier message: 24/05/2006, 14h03
  4. [JTabbed] Onglet grisé (non selectionnable)
    Par Sirkiller dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 18/05/2006, 16h05
  5. Boutons radio selectionnable ou non ?
    Par pontus21 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/04/2005, 11h00

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