Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2019, 22:58   #1
Александр26091982
Пользователь
 
Регистрация: 25.05.2019
Сообщений: 12
По умолчанию [Java] Сохранение значений в ячейках JTable

Подскажите пожалуйста каким образом можно сохранить измененное значение в ячейке, после примененного редактора.
В данном примере, в ячейках к которым применен редактор измененное значение почему-то не сохраняется.
Для редактируемых ячеек setValueAt вызывается с aValue=null
Код:
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();
            }
        });
    }
}

Последний раз редактировалось Александр26091982; 26.05.2019 в 10:30.
Александр26091982 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Планнинг в Excel. Сохранение данных в ячейках Jeraldino74 Microsoft Office Excel 1 22.04.2014 11:30
Сохранение изменений в ячейках winfile Microsoft Office Excel 4 10.04.2013 23:11
Java JTable TableModelListener не отрабатывает событие stream2006 Общие вопросы по Java, Java SE, Kotlin 0 01.04.2013 02:12
Java & MySQL. Не могу связать jtable с таблицей бд. NadS Java Базы данных (JDBC, JPA, Hibernate) 1 21.06.2012 09:02
удаление значений в ячейках pirat:) Microsoft Office Excel 4 23.12.2008 20:54