Данные JTable не обновляются

У меня есть JTable в моей программе, и я хочу, чтобы пользователь мог обновлять таблицу одним нажатием кнопки.

public void popUpWindow(JTable t)
 {
            JFrame frame=new JFrame();

            DefaultTableModel dtm=new DefaultTableModel(data,columnNames);
            t.setModel(dtm);

            JButton btnEdit=new JButton("Edit");
            JButton btnUpdate=new JButton("Update");
            btnUpdate.setEnabled(false);
            JButton btnDelete=new JButton("Delete");

            btnEdit.setBounds(150, 220, 100, 25);
            btnUpdate.setBounds(150, 260, 100, 25);
            btnDelete.setBounds(150, 300, 100, 25);
            JScrollPane jsp=new JScrollPane(t);
            jsp.setBounds(0, 0, 880, 200);
            frame.setLayout(null);

            frame.add(jsp);

                    jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

            frame.add(btnEdit);
            frame.add(btnUpdate);
            frame.add(btnDelete);
            frame.setSize(900,400);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

            int row,column;
            btnEdit.addActionListener(new ActionListener()
                {

                    public void actionPerformed(ActionEvent e)
                    {
                      t.setEnabled(true);
                      btnUpdate.setEnabled(true);
                    }
                }); 

            btnUpdate.addActionListener(new ActionListener()
                {

                    public void actionPerformed(ActionEvent e)
                    {                                           
                        if(t.isEditing())
                        {
                            row=t.getEditingRow();
                            column=t.getEditingColumn();
                            // System.out.println("row : "+row+" column : "+column);
                            Object s=dtm.getValueAt(row, column);
                            dtm.setValueAt(s, row, column);
                            dtm.fireTableCellUpdated(row,column);
                            // System.out.println(s);
                      }

                    }
                }); 
 }

Всякий раз, когда я нажимаю кнопку «Обновить», содержимое ячейки не обновляется. Что может быть причиной этого?

Функционирование кнопки «обновить»: всякий раз, когда пользователь нажимает на нее, jtable входит в режим редактирования, и пользователь может редактировать уже заполненное содержимое jtable. Я хочу сохранить отредактированное значение ячейки в определенной переменной, и для этой цели я выбрал переменную s, т. е. «s» будет хранить отредактированное содержимое ячейки.


person ninja coder    schedule 23.03.2016    source источник
comment
Почему вы используете t.isEditing()? не будет ли это ложным, если вы покинете ячейку, чтобы нажать JButton? Мне это кажется схематичным, это и то, что вы меняете данные при повторном извлечении модели таблицы, а затем запускаете метод уведомления для переменной dtm. Вроде бы одно и то же, но все равно выглядит забавно. Кроме того, это окно верхнего уровня должно быть JDialog не JTable.   -  person Hovercraft Full Of Eels    schedule 24.03.2016
comment
Я почти уверен, что isEditing() - это когда вы сейчас редактируете ячейку в таблице, чего вы не можете сделать, когда фокус нажимает кнопку. Возможно, вам больше повезет с получением выбранных ячеек table.getSelectedRow() и table.getSelectedColumn(). Также кажется, что вы просто устанавливаете один и тот же объект в одну и ту же ячейку, не меняя его.   -  person Matthew Wright    schedule 24.03.2016
comment
@Matthew Я пробовал с table.getSelectedRow() и table.getSelectedColumn(). Кроме того, я удалил условие isEditing(), но оно все равно не работает.   -  person ninja coder    schedule 24.03.2016
comment
Добавьте туда System.out.println("Update at ["+row+", "+column+"]");, чтобы убедиться, что он действительно работает. Но из того, что я сказал ранее, может показаться, что ничего не происходит, потому что вы ничего не делаете с Object s. Вы получаете значение и устанавливаете его обратно.   -  person Matthew Wright    schedule 24.03.2016
comment
@Matthew Я добавил System.out.println(строка: +строка+столбец: +столбец); чтобы увидеть, действительно ли это работает. И да, окно вывода показывает, что оно работает. Как я могу сохранить отредактированный контент в Object s?   -  person ninja coder    schedule 24.03.2016
comment
Я не уверен, что понимаю вашу цель. Что вы хотите сделать, когда вы выбираете ячейку и нажимаете обновить? Вы не используете Object s осмысленным образом.   -  person Matthew Wright    schedule 24.03.2016
comment
Извините за недопонимание. Вот как работает кнопка обновления: всякий раз, когда пользователь нажимает на нее, jtable входит в режим редактирования, и пользователь может редактировать уже заполненное содержимое jtable. Я хочу сохранить отредактированное значение ячейки в определенной переменной, и для этой цели я выбрал переменную s, т. е. s будет хранить отредактированное содержимое ячейки.   -  person ninja coder    schedule 24.03.2016
comment
Я не уверен в этом. Разве ячейки JTable уже не доступны для редактирования? Если вы хотите что-то сделать, когда пользователь изменил ячейку, этот поток может указать вам на правильное направление   -  person Matthew Wright    schedule 24.03.2016