Jtable doesn't refresh/update data

前端 未结 2 1736
被撕碎了的回忆
被撕碎了的回忆 2020-12-20 03:07

I have a problem with JTable/JScrollPane. My data table is not refreshing/updating. I am using DefultTableModel and according to the c

2条回答
  •  借酒劲吻你
    2020-12-20 03:41

    Your first snippet shows this:

    JTable table = new JTable(model);

    but your gui() constructor shows:

    JTable table = new JTable(data, columnNames);

    You initiate the table twice. Once using the TableModel (JTable(TableModel tm)) the next using JTable(int rows,int cols) this is not good, initiate the JTable once in the constructor:

    gui() {
    DefaultTableModel model = new DefaultTableModel(data,columnNames);
    JTable table =  new JTable(model);
    JScrollPane scrollPane = new JScrollPane(table);
    
    JButton next = new JButton("next");
    JButton prev = new JButton("prev");
    next.addActionListener(this);
    prev.addActionListener(this);
    JPanel panel = new JPanel(new BorderLayout());
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(prev);
    buttonPanel.add(next);
    panel.add(buttonPanel, BorderLayout.SOUTH);
    panel.add(table.getTableHeader(), BorderLayout.PAGE_START);
    panel.add(scrollPane, BorderLayout.CENTER);
    getContentPane().add(panel);
    }
    

    UPDATE:

    Here is an example that has a thread which will start 2.5 secinds after the UI is visible and change a value of the JTable:

    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    
    public class Test extends JFrame {
    
        public static void main(String[] args) throws Exception {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new Test().createAndShowUI();
                }
            });
    
        }
    
        private void createAndShowUI() {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            initComponents(frame);
            frame.pack();
            frame.setVisible(true);
            new Thread(new Runnable() {
    
                @Override
                public void run() {
                    try {
                        Thread.sleep(2500);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
                    } 
                    SwingUtilities.invokeLater(new Runnable() {
    
                         @Override
                         public void run() {
                           model.setValueAt("hello", 0, 0);
                         }
                    });
                }
            }).start();
        }
        static DefaultTableModel model;
    
        private void initComponents(JFrame frame) {
    
            String data[][] = {
                {"1", "2", "3"},
                {"4", "5", "6"},
                {"7", "8", "9"},
                {"10", "11", "12"}
            };
    
            String col[] = {"Col 1", "Col 2", "Col 3"};
    
            model = new DefaultTableModel(data, col);
            JTable table = new JTable(model);
    
            frame.getContentPane().add(new JScrollPane(table));
        }
    }
    

提交回复
热议问题