Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение значений в ячейках JTable 
:(
    Опции темы
Александр26091982
Дата 26.5.2019, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.5.2019

Репутация: нет
Всего: нет



Подскажите пожалуйста каким образом можно сохранить измененное значение в ячейке, после примененного редактора.
В данном примере, в ячейках к которым применен редактор измененное значение почему-то не сохраняется.
Код

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();
            }
        });
    }
}

PM MAIL   Вверх
LSD
Дата 27.5.2019, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 38
Всего: 537



Отображение узнает о том, что данные изменились через механизм событий. Когда данные в модели поменялись, модель должна разаслать событие, что данные поменялись fireTableCellUpdated(row, column).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.