Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 25.05.2019, 23:58   #1
Александр26091982
Новичок
 
Регистрация: 25.05.2019
Сообщений: 1
Репутация: 10
По умолчанию [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 в 11:30.
Александр26091982 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Планнинг в 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 21:54


05:57.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru