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 :

Barre de défilement bloquée par la souris d'une JTable


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Barre de défilement bloquée par la souris d'une JTable
    Bonjour,

    J'ai un problème, ou j'ai vraiment eu du mal a trouvé d'ou venait le problème.
    J'ai la barre de défilement qui reste bloqué à la molette de la souris à l'initialisation du contenu de mon JPanel.
    Comme si j'avais un problème de sélection.

    Je me suis rendu compte que le problème venait d'un JButton.
    En effet lorsque je clique sur JButton dans un panel.
    Lors de l'initialisation du contenu, ma JTable reste inactif à la molette de la souris.
    Il faut que je clique sur une cellule de la JTable pour débloquer le défilement à l'aide de la molette.

    Je suis sur que le problème venait du JButton.
    Car j'ai le problème si j'appuie sur le JButton, mais je ne l'ai plus si je demande la même action par le JMenu qui fait appel à la même méthode, je n'ai plus le problème de défilement.

    Je pensais que le problème pouvait venir du focus du JButton
    J'avais donc posté pour trouvé une solution, j'ai donc mis
    JButton.setFocusable(false). Mais sans résultat

    Ma question est comment perdre le focus sur le JButton après un clique?

    EDIT>
    J'ai fais un essai avec setFocusable(false) dans l'action focusGained.

    Voici mon 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
    final JButton invitation = new JButton("Boissons invitations");
    		invitation.setFont(police_bouton_max);
    		invitation.setPreferredSize(taille_bouton);
    		invitation.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				//Changement de contenu
    				model.ficheObserver("invitation");	
    			}
    		});
    		invitation.addFocusListener(new FocusListener(){
    			@Override
    			public void focusGained(FocusEvent arg0) {
    				invitation.setFocusable(false);
    			}
     
    			@Override
    			public void focusLost(FocusEvent arg0) {
    				// TODO Auto-generated method stub
    			}
    		});
    Je n'ai plus de problème de barre de défilement !
    Le problème de ce code ne fonctionne plus pour les autres boutons.

    J'ai donc un problème de focus!
    N'étant pas un expert en focus, j'ai du mal a trouvé une solution

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu peux par exemple dire au JButton de redonner le focus à la JTable.
    Mais si tu as beaucoup d'autres composants graphiques, ça va très vite devenir pénible à gérer.

    Une technique universelle : attraper l'événement de la mollette souris sur le GlassPane. Tu pourras transmettre cet événement uniquement à la JTable.
    L'avantage est que quelque soit ton interface graphique, le code est localisé : il n'est plus disséminé dans les actions des différents composants graphiques.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Tu as posté plus vite que moi.
    En effet, dans mon edit, j'ai mis un morceau de code qui fonctionne mais presque impossible a gérer si j'ai plusieurs composants.

    La seconde solution consiste a récupérer le focus sur le JScrollPane lors de l'initialisation?
    J'avais déjà essayé de faire un table.selectAll(), mais ça ne fonctionnait pas!
    Comment t'y prends tu?
    Voici mon tableau:
    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
    ///////////////////////////////////  Tableau
    		JPanel tableau = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
    		tableau.setPreferredSize(Dimension_taille.Redim(1550, 550));
    		table = new JTable(new Tableau_fiche_boissons_model());
    		initialiseModeleTable(table);
    		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		table.setCellSelectionEnabled(true);
    		table_model = (Tableau) table.getModel();
     
    		//Impression
    		model.impressionJtable(table, "Tableau Fiche boissons");
     
    		//Render
    		render_table(table);
     
    		//Create the scroll pane and add the table to it.
    		JScrollPane scrollPane = new JScrollPane(table);
     
    		//Add the scroll pane to this panel.
    		tableau.add(scrollPane);

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Je t'ai parlé du GlassPane. C'est un composant transparent présent sur la JFrame.
    Il est capable d'intercepter des événements. Il suffit de les transmettre au bon composant.
    Il y a beaucoup de littérature sur ce sujet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ou plus bourrin encore, un AWTEventListener...

    Il écoute tous les event de ton appli, tu pourras sans problème les redispatcher à ta JTable.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Je cherche si c'est possible de quitter le focus du JButton, ou de l'appliquer a un autre composant, ou le composant suivant!

    Je suis en train de chercher sur ses solutions, pour le moment je n'ai pas encore la solution.

    Je ne préfère pas agir sur la JTable. Car le problème vient du bouton et non de la table.

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

Discussions similaires

  1. [XL-2013] Valeur de la barre de défilement multipliée par la valeur d’une variable
    Par Hadi2015 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/02/2015, 22h16
  2. [2005] xp_sendmail bloqué par le verrou d'une connexion cliente
    Par Wingelin dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/06/2014, 08h38
  3. barre de défilement bloqué
    Par lebanner59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 31/08/2012, 15h35
  4. [AC-2003] Défilement vertical listBox par déplacement souris
    Par dev197 dans le forum IHM
    Réponses: 0
    Dernier message: 01/04/2010, 11h03
  5. afficher une ligne(par son numero) d'une JTable
    Par linouline dans le forum Composants
    Réponses: 7
    Dernier message: 27/05/2006, 14h11

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