posted 20 years ago
Hi All,
I'm trying to use Maskformatter in a JTable's column. I went thro' Swing tutorial and coded accordingly.
When I edit values in the table, the formatter does work and restrict the values.
But when the focus is lost, the entered value in the cell disappears.
When I debugged, I found it fails during commitEdit (precisely during stringToValue conversion). Here is the code.
please provide your thoughts.
public class CustomerIDEditor extends DefaultCellEditor {
JFormattedTextField ftf;
public CustomerIDEditor() {
super(new JFormattedTextField());
ftf = (JFormattedTextField)getComponent();
MaskFormatter formatter = null;
try {
formatter = new MaskFormatter("########");
} catch (java.text.ParseException e) {
System.err.println("formatter is bad: " + e.getMessage());
System.exit(-1);
}
ftf.setFormatterFactory(new DefaultFormatterFactory(formatter));
ftf.setValue(null);
ftf.setHorizontalAlignment(JTextField.TRAILING);
ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
} //CONSTRUCTOR ENDS
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected,
int row, int column) {
JFormattedTextField ftf =
(JFormattedTextField)super.getTableCellEditorComponent(
table, value, isSelected, row, column);
System.out.println("getTableCellEditorComponent called: " + value);
ftf.setValue(value);
return ftf;
}
public Object getCellEditorValue() {
JFormattedTextField ftf = (JFormattedTextField)getComponent();
try { //The text is valid,
ftf.commitEdit(); //so use it.
} catch (java.text.ParseException e) {
System.out.println("Exception:" + e.getMessage() + "Text:" + ftf.getText() ); }
System.out.println("getCellEditorValue called: " + ftf.getValue());
return ftf.getValue();
}
}