从结果集填充表时更改列的jtable类型 [英] Change Column Type of jtable when table populate from resultset

查看:85
本文介绍了从结果集填充表时更改列的jtable类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have worker for fill the jtable from resultset like below;

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或0Jtable将此列显示为true或false我需要在jtable中编辑最后一列typr到boelan。我该怎么办?

But all of columns come as String. "IsActive" columns of DB is a bit only have "1" or "0" Jtable shows this columns as "true" or "false" I need edit last column typr to boelan in jtable. How can i do it ?

推荐答案

JDBCAdapter ,扩展 AbstractTableModel ,说明了关系数据库和Java数据类型之间的典型映射。可以看到这里,可以在<$ href =http://www.oracle中的 samples / demo / jfc / TableExample 中找到完整的示例。 com / technetwork / java / javase / downloads / jdk8-downloads-2133151.htmlrel =nofollow> Java SE开发工具包8u25演示和示例下载 。概括地说,

JDBCAdapter, which extends AbstractTableModel, illustrates a typical mapping between relational database and Java data types. It may be seen here, and a complete example may be found in samples/demo/jfc/TableExample, found among the Java SE Development Kit 8u25 Demos and Samples Downloads. In outline,


  • 覆盖 getColumnClass()

ResultSetMetaData 获取列的数据类型

使用开关(类型)返回正确的 type-token

还要考虑 SwingWorker< Row,Row> ,以便在 publish()/ process()

这篇关于从结果集填充表时更改列的jtable类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆