Обновить jTable

Кажется, я не могу обновить свою таблицу. Я создал кнопку обновления, которая вызывает jTable1.repaint();

private void jButton8ActionPerformed(java.awt.event.ActionEvent evt)        
// Reader Refresh
        jTable1.repaint();
    }

Я также попытался снова вспомнить RegistryValues в кнопке типа RegistryValues.arp(null);.

private void jButton8ActionPerformed(java.awt.event.ActionEvent evt)        
// Reader Refresh
        RegistryValues.arp(null);
    }

Также пробовал комбинировать значения реестра и перекрашивать кнопку.

Ниже приведен код моего файла jTable. RegistryValues относятся к другому классу, который использует JNA для чтения реестра, если это имеет значение.

jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"Protected Mode at Startup", RegistryValues.arp(null)},
                {"Display PDF in browser", RegistryValues.arb(null)},
                {"EULA Accepted?", RegistryValues.are(null)},
                {null, null}
            },
            new String [] {
                "Software", "Status"
            }
        ));

person jerhynsoen    schedule 22.08.2012    source источник
comment
Чтобы быстрее получить помощь, включите sscce.   -  person user1329572    schedule 22.08.2012


Ответы (1)


Ни один

jTable1.repaint();

or

RegistryValues.arp(null);

фактически обновит таблицу новыми значениями. Для этого вам нужно либо обновить текущую модель таблицы, либо установить новую модель, но в вашем ActionListener.

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

Что-то вроде:

DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setValueAt(RegistryValues.arp(null), 0, 1);
// set more row data, etc.

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

person Reimeus    schedule 22.08.2012
comment
@jerhynsoen: вы определяете DefaultTableModel в своем вопросе. Сделайте модель таблицы по умолчанию отдельным классом с возможностью обновления. - person Gilbert Le Blanc; 22.08.2012
comment
@Gilbert, собственный класс или собственный метод? - person jerhynsoen; 22.08.2012
comment
@jerhynsoen: расширите DefaultTableModel до класса MyTableModel и добавьте возможность обновления. Извините, что я не был яснее в первый раз. - person Gilbert Le Blanc; 22.08.2012
comment
-1 для второй части: никогда не запускать какие-либо события от имени модели (это ее собственная ответственность). Вместо этого исправьте модель, чтобы запускать события по мере необходимости. - person kleopatra; 23.08.2012