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 :

editer un JTextField contenu dans une JTable


Sujet :

Composants Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut editer un JTextField contenu dans une JTable
    Bonjour,

    J'utilise une JTable possèdant une colonne ayant comme éditeur un JComboBox et une autre colonne contenant JTextField.

    J'ai des problème d'édition de JTextField.

    Imaginons, une JTable avec deux lignes.

    Si je fais les opérations suivantes:
    Sur la première ligne, je clique sur le JTextField vide.
    Sur la seconde ligne, je clique sur JTextField vide => le JTextField de la 1ère ligne disparait et sur le JTextField de la seconde ligne, j'ai ceci :-(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.JTextField[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1ef9f1d,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=0,columnWidth=0,command=,horizontalAlignment=LEADING]
    Voilà comment j'ai configuré le renderer et l'editor du JTextField de ma JTable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    table.setDefaultRenderer(JTextField.class, new TextFieldRenderer());
    table.setDefaultEditor(JTextField.class, new TextFieldEditor());
    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
    public class TextFieldEditor extends AbstractCellEditor implements TableCellEditor{
     
        private static final long serialVersionUID = 1L;
        JTextField textField;
     
        public TextFieldEditor(){
            this.textField = new JTextField();
        }
     
     
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            JTextField textField = (JTextField)value;
            textField.setText(textField.getText());
            return textField;
        }
     
        public Object getCellEditorValue() {
           return textField.getText();
        }
    }
    public class TextFieldRenderer extends JTextField implements TableCellRenderer {

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       public TextFieldRenderer(){
        }
     
        private static final long serialVersionUID = 1L;
     
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
            JTextField textField = (JTextField)value;
            this.setText(textField.getText());
            return this;
        }
    }
    Une idée?

    Merci beaucoup :-)

  2. #2
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    ?? JTextField textField = (JTextField)value;
    ?? textField.setText(textField.getText());

    à remplacer par textField.setText((string) value);

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Re,

    En fait, la value est un JTextField et pas un String.

    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JTextField textField = (JTextField)value;
    textField.setText(textField.getText());
    a l'air correct.

    PS: Le model de ma JTable est créee de cette facon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            JTextField texField1 = new JTextField();
            JTextField texField2 = new JTextField();
     
            Object[][] data = new Object[][]{{"la langue du document est", texField1}, {"la langue du document est", texField2}};
            AbstractTableModelPerso modelePerso = new AbstractTableModelPerso(columnNames, data);

  4. #4
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Non la value est une string contenu dans un JTextField.


    Qui plus est : JTextField textField masque le membre textField de ta classe cellEditor.( ce qui te génére ton erreur)

    et si tu trace value tu constatera que c'est une chaine.

    en complément
    textField.setText(textField.getText()); ce code ne fait rien

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut re
    Re,

    Le type de la value ne dépend pas de ce que tu mets dans le modèle de ta JTable?

    Pq avec mon modèle qui contient explicitement des objets JTextField, je vois bien avec le traceur que "value" est un JTextField.

  6. #6
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Le type de la value ne dépend pas de ce que tu mets dans le modèle de ta JTable?
    je ne comprends pas cette question.

    Pq avec mon modèle qui contient explicitement des objets JTextField, je vois bien avec le traceur que "value" est un JTextField.
    As-tu tracé value dans getTableCellEditorComponent ?

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ton modèle doit contenir des données pas des objets "graphiques" comme un JTextField.

  8. #8
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    merci fr1man celui là je l'avais pas vu (trop concentré sur le debut du post).

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Ok, merci :-)

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

Discussions similaires

  1. récuperer le contenu d'une JTable dans Un fichier excel
    Par allomona dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 03/12/2010, 11h09
  2. [JTextField] Insertion du contenu dans une base SQL
    Par haism dans le forum Débuter
    Réponses: 10
    Dernier message: 02/09/2010, 12h08
  3. Réponses: 1
    Dernier message: 08/09/2008, 14h25
  4. ecrire le contenu d'une jtable dans une BDD
    Par gdhugue1 dans le forum Composants
    Réponses: 1
    Dernier message: 13/06/2007, 15h52
  5. PB du caret sur un JTextField dans une Jtable
    Par jeffciara dans le forum Composants
    Réponses: 4
    Dernier message: 14/11/2006, 18h48

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