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 :

[jTable] Arreter l'édition


Sujet :

Composants Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut [jTable] Arreter l'édition
    Bonjour

    J'ai un petit probléme avec une jtable, je voudrais pouvoir stopper l'édition d'une case, pas l'interdire mais bien la stopper.

    La solution que j'ai trouvée(elle est pas trés jolie ) est d'essaye d'éditer une case non éditable avec la commande ' Tableur.editCellAt(row,column) '.

    Mais la question que je me pose est comment faire quand toutes les cases sont éditables ?

    [EDIT]

    La solution au probléme est :

    myTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

    Merci à tous

  2. #2
    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
    Par défaut
    Qu'est ce que tu entends par "stopper"?...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Quand on tape quelque chose dans une cellule, elle passe en mode édition, on ne donc pas récuperer cette valeur, pour la récuperer il faut stopper l'edition, pour cela il faut appuyer sur échappe, sur tab ou aller sur une autre cellule, la perte du focus(du tableau) n'arrete pas l'édition.

    Je voudrais donc arreter le "mode edition" de la cellule.

    J'espére que cela pourra t'aider dans la compréhension de mon probléme

  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
    Par défaut
    A vrai dire, je ne comprends toujours pas...

    Tu l'as dit toi-même, tu peux annuler ta modification en appuyant sur echap ou en changeant de case sans avoir validé son contenu.

    Que veux-tu faire exactement?
    Récupérer le contenu de ta case? => getValueAt(row, col)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Je ne veux pas annuler la modification mais la valider, je doit mal m'expliquer .

    Quand t'on tappe qu'elle que chose dans une cellule, s'il l'on clic en dehors du tableau, la cellule modifier est toujours en mode édition(il y a toujours le curseur de frappe), donc le contenu de la cellule n'est pas validée.

    Ce que je voudrais faire, c'est que lorsque que l'on clic ailleurs que sur le tableau, le contenu de la cellule soit validé.

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Ce qu'il faut, c'est que tu rendes ta JTable, pour cela, il faut que dans ton modèle, tu surcharges la méthode isCellEditable(int row, int column) et que tu renvoies true sur ce que tu veut pouvoir éditer.

    Ensuite, il ne faut pas oublier de surcharger aussi la méthode setValueAt() de ton modèle

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Pourquoi je dois surcharger setValueAt ?

    Je ne veux pas interdire l'edition d'une cellule, mais l'arreter, c'est a dire que lorsque le tableau n'a plus le focus, la cellule où l'on a tappé du texte ne soit plus en mode édition(qu'il n'y est plus le curseur de séléction)

    Merci de toute vos réponces, mais je doit pas étre claire dans mes explications, ou je comprends pas tout (je suis débutant en java )

  8. #8
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    teste ca...

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    import java.awt.HeadlessException;
    import java.awt.EventQueue;
    import java.awt.BorderLayout;
    
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.JScrollPane;
    import javax.swing.JButton;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.TableModel;
    
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 20-Jun-2006
     * Time: 20:27:10
     * To change this template use File | Settings | File Templates.
     */
    public class TableStopEditingTest extends JFrame {
    
        public TableStopEditingTest() throws HeadlessException {
            JTable myTable = new JTable(new MyTableModel());
            myTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
            add(new JScrollPane(myTable));
            add(new JButton("Click me :-) "), BorderLayout.SOUTH);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable(){
                public void run() {
                    TableStopEditingTest t = new TableStopEditingTest();
                    t.setSize(400, 300);
                    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    t.setVisible(true);
                }
            });
        }
    }
    
    class MyTableModel implements TableModel {
    
        private Object[][] datas = new Object[][] {
                {"Col00", "Col01", "Col02"},
                {"Col10", "Col11", "Col12"},
                {"Col20", "Col21", "Col22"},
                {"Col30", "Col31", "Col33"},
                {"Col40", "Col41", "Col42"},
                {"Col50", "Col51", "Col52"}
        };
    
        private String[] s = new String[]{"Col", "Col", "Col"};
    
        public int getRowCount() {
            return datas.length;  //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public int getColumnCount() {
            return datas[0].length;  //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public String getColumnName(int columnIndex) {
            return s[columnIndex];  //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public Class<?> getColumnClass(int columnIndex) {
            return String.class;  //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            // everything is always editable...
            return true;  //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public Object getValueAt(int rowIndex, int columnIndex) {
            return datas[rowIndex][columnIndex];  //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            datas[rowIndex][columnIndex] = aValue;
            //To change body of implemented methods use File | Settings | File Templates.
        }
    
    
        public void addTableModelListener(TableModelListener l) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    
        public void removeTableModelListener(TableModelListener l) {
            //To change body of implemented methods use File | Settings | File Templates.
        }
    }

  9. #9
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Si je comprend bien, tu veux que en cliquant hors du tableau, la celulle éditée ne le soit plus?
    ALors là...peut-être avec un mouseListener sur ta Frame qui mettrais le focus sur le JTable et appuierais sur "Enter".Mais bon c'est du bidouillage

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Merci encore pour toutes vos réponses

  11. #11
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    tu a tester le code que j'ai poster?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    J'ai juste testé :
    myTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
    et ca fonctionne

  13. #13
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    c'est pour ca que je l'ai mie en rouge :-)
    tout le reste c'est pour moi c'est plus facile de comprendre un probleme sur un peu de code que sur rien ;-)

  14. #14
    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
    Par défaut
    Ok, j'avais pas compris ton problème...
    Par contre, pas mal du tout la solution : je ne connaissais pas...

    [EDIT]
    Par contre, j'ai une petite remarque...
    Ca marche quand il y a perte de focus de ma JTable dans la classe où je l'ai créée (un panel particulier), mais pas dans toute mon appli (ma frame contenant le panel contenant ma table).

    Tu penses que c'est possible de propager ce comportement sur toute mon appli?

  15. #15
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    >Tu penses que c'est possible de propager ce comportement sur toute mon appli?

    non je croit pas que tu peut.

    putClientProperty est une methode de JComponent mais pas static.
    tu peux pas faire comme avec UIManager.put

  16. #16
    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
    Par défaut
    oki

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/05/2009, 10h26
  2. [Swing][JTable]Gérer l'édition
    Par Baptiste Wicht dans le forum Composants
    Réponses: 28
    Dernier message: 10/05/2006, 08h32
  3. [JTable] Pb hauteur variable de cellule + édition
    Par AurélienB dans le forum Composants
    Réponses: 3
    Dernier message: 08/02/2006, 15h32
  4. Quel listener pour l'édition d'une JTable?
    Par ®om dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2005, 21h13
  5. [ JTable] Comment empêcher l'édition
    Par stailer dans le forum Composants
    Réponses: 3
    Dernier message: 28/04/2004, 10h27

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