我无法从JTable线程更新我的SwingWorker。我的代码;

public class FillTable extends SwingWorker<Void, Void> {

        protected Void doInBackground() throws Exception {
            ResultSet rsaccounts;
            Statement stmt;
            String queryaccounts = "select NAME from acc (nolock)\n" + "order by Name";

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://192.100.100.23;" + "databaseName=Dbacc;" + "user=" + "sa" + ";" + "password=" + "sapassword!" + ";";
            Connection con = DriverManager.getConnection(connectionUrl);
            stmt = con.createStatement();
            rsaccounts = stmt.executeQuery(queryaccounts);
            ResultSetMetaData rsmd = rsaccounts.getMetaData();


            Vector<String> columnNames = new Vector<String>();
            columnNames.add(rsmd.getColumnName(1));
            System.out.println(columnNames);
            int columnCount = rsmd.getColumnCount();

            Vector<Vector<Object>> data = new Vector<Vector<Object>>();

           while (rsaccounts.next()) {
                Vector<Object> vector = new Vector<Object>();
                for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
                vector.add(rsaccounts.getObject(columnIndex));
                }
                data.add(vector);

             }
           DefaultTableModel model = new DefaultTableModel(columnNames,data);
           jTable3.setModel(model);

            rsaccounts.close();
            stmt.close();
            return null;

        }
      public void done() {
            SearchButton.setEnabled(true);
            CreateButton.setEnabled(true);
        }

    }


我在GUI的初始化组件中执行此swingworker线程,以在程序启动时填充jtable。

fillAccList = new FillTable();
fillAccList.execute();


程序启动时,我在屏幕上看到[NAME],因为我添加了以下行:System.out.println(columnNames);如您所见,在swingworker中进行控制。但是我的jtable没有装满。任何的想法 ?

最佳答案

DefaultTableModel的构造函数首先需要数据,然后是列名。

更改:

DefaultTableModel model = new DefaultTableModel(columnNames,data);


至:

DefaultTableModel model = new DefaultTableModel(data, columnNames);

10-01 22:45
查看更多