Подскажите пожалуйста каким образом можно сохранить измененное значение в ячейке, после примененного редактора. В данном примере, в ячейках к которым применен редактор измененное значение почему-то не сохраняется.
| Код | public class KadrPress extends JFrame { public KadrPress() throws HeadlessException { super("Кадровая работа"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.add(levayaJTable()); this.setExtendedState(MAXIMIZED_BOTH); this.setVisible(true); } //Модель основной таблицы private JTable levayaJTable() { String[] dannie = new String[]{ "Фамилия", "Имя", "Отчество", "Число, месяц, год рождения", "Место рождения (согласно паспорта)", "Серия и номер паспорта", "Дата выдачи", "Кем выдан", "Код подразделения", "Кем выдано", "ИНН" }; JTable levayaJTable = new JTable(new OsnovTable(dannie)); levayaJTable.setRowHeight(20); levayaJTable.setOpaque(false); levayaJTable.getColumnModel().getColumn(1) .setCellEditor(new MaskEditor(new JFormattedTextField())); return levayaJTable; } //Модель основной таблицы private class OsnovTable extends AbstractTableModel { String[] dannie; HashMap<String, String> data = new HashMap<>(); public OsnovTable(String[] dannie) { this.dannie = dannie; } @Override public int getRowCount() { return dannie.length; } @Override public int getColumnCount() { return 2; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) return dannie[rowIndex]; if (columnIndex == 1) return data.get(dannie[rowIndex]); return null; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex == 0) return false; if (columnIndex == 1) return true; return false; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { System.out.println(aValue.toString()); data.put(dannie[rowIndex], (String) aValue); } } //Создание редактора таблицы private class MaskEditor extends DefaultCellEditor { public MaskEditor(JTextField textField) { super(textField); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { JFormattedTextField result = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column); MaskFormatter dateMask; try { if (table.getModel().getValueAt(row, 0).equals("Число, месяц, год рождения") || table.getModel().getValueAt(row, 0).equals("Дата выдачи")) { dateMask = new MaskFormatter("##.##.####"); result = new JFormattedTextField(dateMask); } if (table.getModel().getValueAt(row, 0).equals("Серия и номер паспорта")) { dateMask = new MaskFormatter("#### ######"); result = new JFormattedTextField(dateMask); } result.setBorder(new LineBorder(null, 0)); return result; } catch (ParseException e) { e.printStackTrace(); } return result; } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new KadrPress(); } }); } }
|
|