MyTableCellEditor необходимо добавить в JTable редактирование перезаписи (например, ячейку Excel) и правила ввода данных (parseDouble). Почему ячейка стирает введенное пользователем значение, когда пользователь нажимает на другую ячейку? IOW: значение, которое вводится в ячейку, отображается до тех пор, пока не будет нажата другая ячейка, после чего она исчезнет. Выполнение программы getTableCellEditorComponent вызывается, когда значение ячейки редактируется пользователем, а getCellEditorValue вызывается, когда редактирование ячейки завершено.Почему JTable не показывает ввод пользователя?
public class MyTableFrame extends javax.swing.JFrame
implements TableModelListener {
private static TableColumn column2;
public MyTableFrame() {
initComponents();
...
column2 = jTable.getColumnModel().getColumn(2);
column2.setCellEditor(new MyTableCellEditor());
jTable.getModel().addTableModelListener(this);
}
}
public class MyTableCellEditor extends AbstractCellEditor implements
TableCellEditor {
// Component to handle the editing of a cell value
private JTextField component = new JTextField();
// Return value
private Object value;
private DefaultTableModel model;
private int rowIndex;
private int columnIndex;
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int rowIndex, int columnIndex) {
model = (DefaultTableModel) table.getModel();
this.value = value;
this.rowIndex = rowIndex;
this.columnIndex = columnIndex;
component.setText("");
return component;
}
public Object getCellEditorValue() {
try {
return Double.parseDouble(model.getValueAt(rowIndex, columnIndex)
.toString());
} catch (Exception ex) {
return value;
}
}
}
Точно так. Бесконечно благодарен. – jacknad