java - 从结果集中填充表时更改 jtable 的列类型

标签 java swing jtable swingworker tablemodel

我有工作人员从结果集中填充 jtable,如下所示;

public class WorkerFillTable extends SwingWorker<DefaultTableModel, DefaultTableModel> {
        private DefaultTableModel modeltable;
        public WorkerFillTable(DefaultTableModel modeltable) {
         this.modeltable = modeltable;
        }
       @Override
     protected DefaultTableModel doInBackground() throws Exception {
            ResultSet rs;
            Statement stmt;
            String query = "select Name,ID,Status,IsActive from current_conf\n" +
            "order by Name,ID";

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://192.168.130.100;" + "databaseName=DBST;" + "user=" + "user1" + ";" + "password=" + "userpass1" + ";"; 
            Connection con = DriverManager.getConnection(connectionUrl);
            stmt = con.createStatement();
            rs = stmt.executeQuery(query);
            ResultSetMetaData rsmd = rs.getMetaData();

            Vector<String> columnNames = new Vector<String>();
            int columnCount = rsmd.getColumnCount();

            for (int column = 0; column < columnCount; column++) {
                columnNames.addElement(rsmd.getColumnLabel(column + 1));
            } 

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

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

            rs.close();
            stmt.close();
            modeltable = new DefaultTableModel(data, columnNames);
            return modeltable;
        }


      @Override
      protected void done() {
        try {
            TableModel modeltable = get();
            sorter = new TableRowSorter(modeltable);
            cTable.setRowSorter(sorter);
            cTable.setModel(modeltable);
        } catch (InterruptedException | ExecutionException ex) {
        }
      }

    }

但是所有列都以字符串形式出现。 DB 的“IsActive”列有点只有“1”或“0” Jtable 将此列显示为“true”或“false” 我需要将最后一列 typr 编辑为 jtable 中的 boelan。我该怎么做?

最佳答案

JDBCAdapter , 它扩展了 AbstractTableModel ,说明了关系数据库和 Java 数据类型之间的典型映射。可以看到here ,一个完整的例子可以在 samples/demo/jfc/TableExample 中找到。 , 在 Java SE Development Kit 8u25 Demos and Samples Downloads 中找到.概括地说,

  • 覆盖 getColumnClass() .

  • 获取列的数据 type来自 ResultSetMetaData .

  • 使用 switch(type)返回正确的 type-token .

同时考虑一个 SwingWorker<Row, Row>publish()/process() 中获得更细粒度.

关于java - 从结果集中填充表时更改 jtable 的列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180425/

相关文章:

java - 如何将 Hibernate 实体拦截器与 JPA 事务管理器一起使用?

java - 随机数无法解析为类型 - Java 本身的拼写错误

java - RxJavaSwing + 具有纵向横向 View 的 MVVM

java - 根据用户Java Swing绘制多个形状

java - 将 JComboBox 设置为表列不起作用

java - Android Libgdx,如何写入内部文件?

java - 错误: Could not find or load main class ExcelReadWrite

java - 如何根据选择的按钮从类中调用方法?

java - 根据单元格内容为单个 JTable 单元格着色?

java - 如何通过双击正确删除 JTable 中的行?