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 :

[Swing] Forcer la sortie de l'édition d'une cellule


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut [Swing] Forcer la sortie de l'édition d'une cellule
    Salut à tous,

    j'ai un tableau dont les cellules sont des JPanel contenant un JTextArea, elle sont éditables. On peut cliquer dessus pour changer le texte, cependant la cellule ne revient en "mode Renderer" que lorsqu'on clic dans une autre zone du tableau, mais pas en dehors du tableau (la cellule reste en édition), est-ce normal déjà ?

    Mais surtout, si je fais un tri à ce moment là (avec une cellule en édition) en cliquant sur une tête de colonne, la cellule en édition reste à sa place au lieu de suivre la ligne à laquelle elle appartient à sa place dans le tri, cela mélange donc les données des lignes. Je souhaiterais forcer la fermeture d'une édition de cellule, par exemple en forçant la table à appeler la fonction getCellEditorValue() qui permet de rendre l'objet à la cellule et de l'afficher simplement en Renderer. J'exécuterais cela sur l'évènement clic d'une tête de colonne.

    Merci pour les idées.

  2. #2
    Membre actif
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Par défaut
    Si l’était toi je rajouterait un événement sur la perte du focus de ton textArea qui appellerai la fonction cancelEditing sur ton cellEditor que tu as du créer pour mettre ton textArea et tout devrais fonctionner correctement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut
    Salut,
    désolé je n'ai pas pu me pencher de suite sur le problème j'avais encore pas mal de choses à faire. Mais en tout cas un grand merci car ça m'a donné des pistes pour d'autres petits problèmes de comportements que j'ai réussi à résoudre du coup ^^

    Par contre le "cancel" en sortie de focus ça ne peut pas fonctionner car quand on clique sur une entête de colonne, la cellule ne perd pas le focus mais continue d'être en édition. Et pis quand on passe d'une cellule à une autre on est obligé de cliquer 2 fois, pour une cellule texte ce n'est pas très grave, pour un des boutons qui sont dans la ligne c'est beaucoup plus gênant et non intuitif.

    Il faudrait donc trouver "l'inverse", c'est à dire qu'il me faudrait un évènement de clic sur l'entête de colonne, l'écouteur ferait alors un "cancel" de l'édition de la cellule en cours. J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tableR.getColumnModel().getSelectionModel().addListSelectionListener(new javax.swing.event.ListSelectionListener (){
     
    			@Override
    			public void valueChanged(ListSelectionEvent arg0) {
    				System.out.println ("selection tete changée");
     
    			}
     
    		});
    Mais c'est déclenché même quand je change simplement de cellule.

    Est ce que quelqu'un connaitrait l'évènement qui se déclencherait uniquement pour un clic de souris sur l'entête de colonnes de la JTable?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut
    Trouvé! ça marche nickel c'est parfait lol
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tableR.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter() {
    			public void mouseClicked(MouseEvent event) {
    				if (edition) {
    					tableR.getCellEditor().stopCellEditing();
    				}
    			}
    		});
    En plus j'avais la solution sous les yeux car j'avais copié-collé une classe sorter, qui écoute donc sur l'évènement clic d'un entête, mais comme je n'avais pas très bien compris sur le coup j'avais zappé, du coup maintenant ça va mieux ^^

    stopCellEditing() au lieu de cancel, la différence ? cancel efface même ce que l'on vient d'entrer dans la cellule, alors que stop le garde avant de sortir de la cellule. "Tells the editor to stop editing and accept any partially edited value as the value of the editor. The editor returns false if editing was not stopped; this is useful for editors that validate and can not accept invalid entries."
    Tout comme cancel, cette fonction renvoie une erreur s'il n'y a pas de cellules en cours d'édition. Je n'ai vu aucune fonction permettant de savoir s'il y avait une cellule en cours d'édition avant d’appeler cette fonction, du coup j'ai fait mon System D.

    edition: booléen mis à vrai lors de l'appel de la fonction getTableCellEditorComponent() de l'Editor, et à faux avec la fonction retour getCellEditorValue()


    Merci encore

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

Discussions similaires

  1. forcer l'édition d'une cellule d'un StringGrid
    Par vincent DD dans le forum Composants VCL
    Réponses: 5
    Dernier message: 15/01/2010, 11h58
  2. Réponses: 4
    Dernier message: 13/05/2009, 10h26
  3. JTable : édition d'une cellule de type Date
    Par SheikYerbouti dans le forum Composants
    Réponses: 5
    Dernier message: 08/12/2007, 08h50
  4. [JTable] Déplacer le focus et l'édition d'une cellule
    Par nicorama dans le forum Composants
    Réponses: 1
    Dernier message: 27/04/2007, 03h58
  5. Réponses: 8
    Dernier message: 30/03/2007, 16h09

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