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 :-(
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:
1 2
| table.setDefaultRenderer(JTextField.class, new TextFieldRenderer());
table.setDefaultEditor(JTextField.class, new TextFieldEditor()); |
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 {
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 :-)
Partager