使用线程插入JTable中的行



我是Java swing 的新手。我花了很多时间试图找到一种使用run()方法将行插入JTable的方法,但尚未找到它。所以,任何人都可以给我一个解决方案。

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class ShowTable extends JFrame {
    JFrame f=new JFrame();
    JTable jt=new JTable(new DefaultTableModel());
    DefaultTableModel model=(DefaultTableModel)jt.getModel();
    public void showdata(int count, String host, String ip, String os_name, String os_arch, String os_version, String pro_detail, String Mac_add, float  disk_size, float max_memory) {
        System.out.println("Row  :"+count);
        Object data[] = {host, ip, os_name, os_arch, os_version, pro_detail, Mac_add, disk_size, max_memory};
        if (count == 0)
        {       
            model.addColumn("HOSTNAME");
            model.addColumn("IP ADDRESS");
            model.addColumn("OS NAME");
            model.addColumn("OS ARCHITECTURE");
            model.addColumn("OS VERSION");
            model.addColumn("PROCESSOR DETAIL");
            model.addColumn("MAC ADDRESS");
            model.addColumn("HARD DISK");
            model.addColumn("RAM SIZE");
            model.addRow(data);  
        }
        else
        {
            model.addRow(data);
        }
        jt.setBounds(30,40,200,300);
        jt.setFocusable(false);
        jt.setRowSelectionAllowed(false);
        JScrollPane sp = new JScrollPane(jt);
        f.add(sp);
        f.setSize(1300,100);
        f.setVisible(true);
    }
    public static void main() {
        JScrollPane jScrollPane1;
        JTable jTable1;
    }
}

我编写此代码,但每次run()方法执行时才显示一个空白帧。

其他线程的修改应由swingutilities.invokelater进行:

SwingUtilities.invokeLater(() -> {
    // code to be invoked in awt thread
});

工作示例下面(每秒添加新行(:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
public class ShowTable extends JFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            startApp();
        });
    }
    static void startApp(){
        JFrame frame = new JFrame();

        DefaultTableModel model = new DefaultTableModel(0, 1);
        JTable table = new JTable(model);
        frame.getContentPane().add(new JScrollPane(table));
        frame.setSize(new Dimension(800, 600));
        frame.setVisible(true);
        new Thread(){
            @Override
            public void run() {
                while(true) {
                    SwingUtilities.invokeLater(() -> {
                        model.addRow(new Object[]{"some data"});
                    });
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }
}

最新更新