Данните на 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(row : +row+ column : +column); за да видите дали наистина работи. И да, изходният прозорец показва, че работи. Как всъщност мога да съхраня редактираното съдържание в 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