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

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut Inhiber le CTRL + A sur une JTable

    J'ai l'impression qu'une JTable réagit nativement à un Ctrl + A par la sélection de tous les éléments. Je voudrai inhiber ce comportement mais je n'ai pas réussi. J'ai une classe fille de JTable, dans le constructeur j'ajoute un KeyListener avec les trois méthodes à vide mais CtrlA ext ctif quand même. Je pense que cela vient que le KeyListener natif est toujours actif.
    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
     
    	public TableauTerritoires4(List<DonneeTerritoire4> donnees, DocumentCarte4 documentCarte, String repertoireCarte) 
    	{
    		super(new ModeleTerritoires4(donnees, documentCarte));
    		this.repertoireCarte = repertoireCarte;
    		//par défaut on ne sélectionne qu'une seule ligne à la fois
    		setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		addKeyListener(new KeyListener() 
    		{
    			@Override
    			public void keyTyped(KeyEvent e) {}
     
    			@Override
    			public void keyReleased(KeyEvent e) {}
     
    			@Override
    			public void keyPressed(KeyEvent e) {}
    		});
    	}
    CtrlA sélectionne la dernière ligne, cela doit provenir sans doute de setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    Moi je voudrai que CtrlA ne fasse rien du tout.
    C'est en respectant les autres que l'on se fait respecter.

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut

    Je me réponds à moi-même suite à quelques recherches. J'ai créé une KeyStroke qui devrait correspondre à Ctrl + A par le code suivant dans le constructeur du composant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    KeyStroke key = KeyStroke.getKeyStroke("ctrl pressed A");
    Bien entendu j'ai vérifié que cela créait bien la KeyStroke voulue
    Puis j'ai essayé de la dés-enregistrer pour le composant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unregisterKeyboardAction(key);
    Cela devrait normalement inhiber ce Ctrl + A. Malheureusement ce n'est pas le cas.
    Une idée de la raison pour laquelle cela ne marche pas ? Une autre idée ?
    Merci.
    C'est en respectant les autres que l'on se fait respecter.

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut

    J'ai trouvé une solution qui ne me satisfait pas entièrement car utilisable seulement sur un tableau en sélection simple (ListSelectionModel.SINGLE_SELECTION). Si quelqu'un trouve une solution plus élégante, je suis preneur.
    Donc le principe va consister à laisser se faire le Ctrl + A puis remettre le tableau dans son état de sélection précédent. Dans mon modèle la ligne qui est en train d'être traitée est stockée dans ligneTraitee.
    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
     
    		//comment inhiber le Ctrl A sur ce tableau
    		addKeyListener(new KeyAdapter() 
    		{
    			@Override
    			public void keyTyped(KeyEvent e) 
    			{
    				if (e.isControlDown())
    				{
    					int selection =((ModeleTerritoires4)getModel()).getLigneTraitee();		
    					clearSelection();
    					getSelectionModel().setSelectionInterval(selection, selection);
    				}
    			}
    		});
    C'est en respectant les autres que l'on se fait respecter.

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut

    Personne n'a une idée pertinente sur la question ou Java est-il définitivement "has been" ?

    Citation Envoyé par Patrice Henrio Voir le message
    J'ai trouvé une solution qui ne me satisfait pas entièrement car utilisable seulement sur un tableau en sélection simple (ListSelectionModel.SINGLE_SELECTION). Si quelqu'un trouve une solution plus élégante, je suis preneur.
    Donc le principe va consister à laisser se faire le Ctrl + A puis remettre le tableau dans son état de sélection précédent. Dans mon modèle la ligne qui est en train d'être traitée est stockée dans ligneTraitee.
    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
     
    		//comment inhiber le Ctrl A sur ce tableau
    		addKeyListener(new KeyAdapter() 
    		{
    			@Override
    			public void keyTyped(KeyEvent e) 
    			{
    				if (e.isControlDown())
    				{
    					int selection =((ModeleTerritoires4)getModel()).getLigneTraitee();		
    					clearSelection();
    					getSelectionModel().setSelectionInterval(selection, selection);
    				}
    			}
    		});
    C'est en respectant les autres que l'on se fait respecter.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    août 2006
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 3 814
    Points : 7 520
    Points
    7 520

    Par défaut

    Oui mais pourquoi veux-tu inhiber le CTRL+A c'est quoi ton but ici ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut

    Citation Envoyé par wax78 Voir le message
    Oui mais pourquoi veux-tu inhiber le CTRL+A c'est quoi ton but ici ?
    J'ai une table en ListSelectionModel.SINGLE_SELECTION avec 5 lignes. Quand on sélectionne une ligne elle passe en surbrillance et une action liée à cette ligne a lieu sur un JPanel (un dessin). Si je sélectionne une autre ligne le JPanel se redessine avec un nouveau dessin. Si j'appuie sur CTRL+A, la dernière ligne est sélectionnée et le dessin correspondant à cette dernière ligne a lieu.
    En réalité c'est un peu plus compliqué que cela, mais c'est le principe.
    Je voudrai que lors du CTRL+A, rien ne se passe. Si aucune n'était sélectionnée, aucune ne l'est après. Si une ligne était sélectionnée, elle reste sélectionnée.
    Merci d'avoir pris la peine de me répondre.
    C'est en respectant les autres que l'on se fait respecter.

  7. #7
    Membre habitué
    Inscrit en
    octobre 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 198
    Points : 145
    Points
    145

    Par défaut

    Je voudrai que lors du CTRL+A, rien ne se passe.
    Et si tu écoutais simplement sur la sélection si plus d'un élément est sélectionné, alors il ne se passe rien ?

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut

    Citation Envoyé par Dark_TeToN Voir le message
    Et si tu écoutais simplement sur la sélection si plus d'un élément est sélectionné, alors il ne se passe rien ?
    C'est un peu ce que j'ai fait en laissant le CTRL+A se faire (donc sélection du dernier élément) et ensuite je re-sélectionne l'élément précédemment sélectionné (éventuellement aucun). Y-a-t'il un moyen d'écouter la sélection avant l'action du CTRL+A. Pour ma part je n'ai pas trouvé. Un genre beforeSelected, comme on a pour les fermetures de fenêtre. Tout simplement si je peux intercepter le CTRL+A avant qu'il n'agisse ça devrait marcher. En fait c'est l'ordre dans lequel se passe les events qui m'intéresserait.
    C'est en respectant les autres que l'on se fait respecter.

  9. #9
    Membre actif

    Profil pro
    Inscrit en
    janvier 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 412
    Points : 299
    Points
    299

    Par défaut

    Citation Envoyé par Patrice Henrio Voir le message
    C'est un peu ce que j'ai fait en laissant le CTRL+A se faire (donc sélection du dernier élément) et ensuite je re-sélectionne l'élément précédemment sélectionné (éventuellement aucun). Y-a-t'il un moyen d'écouter la sélection avant l'action du CTRL+A. Pour ma part je n'ai pas trouvé. Un genre beforeSelected, comme on a pour les fermetures de fenêtre. Tout simplement si je peux intercepter le CTRL+A avant qu'il n'agisse ça devrait marcher. En fait c'est l'ordre dans lequel se passe les events qui m'intéresserait.
    Bon ça marche pour ce que je veux faire et cela nécessitera une adaptation pour des tableaux avec des sélections multiples. Le code a été donné dans le troisième message.
    C'est en respectant les autres que l'on se fait respecter.

Discussions similaires

  1. [débutant] Filtre 'dynamique' sur une JTable
    Par d_token dans le forum Composants
    Réponses: 8
    Dernier message: 04/08/2006, 12h01
  2. MouseListener sur une JTable
    Par ythim dans le forum Composants
    Réponses: 3
    Dernier message: 21/04/2006, 14h40
  3. Recupérer un évènement sur une JTable
    Par pkdev dans le forum Composants
    Réponses: 2
    Dernier message: 06/12/2005, 11h19
  4. [jTable] Gérer clik droit sur une jTable vide
    Par serwol dans le forum Composants
    Réponses: 4
    Dernier message: 01/12/2005, 10h06
  5. Non réception d'un evènement sur une JTable
    Par Kant dans le forum Composants
    Réponses: 4
    Dernier message: 28/05/2004, 10h38

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