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 :-)