2014-03-05 21 views
0

我打開它的案例,但我不明白的意見文章。因爲我沒有找到它的好例子。如果有人爲以下情況編寫示例代碼對我非常有用。讓我解釋我的問題;用複選框從結果集創建表模型

我有MSSQL DB中的SQL表;

Column 1: "Mach" (varchar) 
Column 2: "ID" (int) 
Column 3: "Status" (varchar) 
Column 4: "IsActive" (bit) (values 1 or 0 under db table) //this one must show as checkbox in jTable 

我想用抽象表模型創建一個jTable。當使用此模型創建表格時,表格顯示第4列爲複選框。我有幾個嘗試,但在jTable的第4列顯示「true」或「false」。

在此先感謝。

+2

開始通過在考慮看看[如何使用表(http://docs.oracle.com/javase/tutorial/uiswing/components/table.html),瞭解[細胞編輯和渲染] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender)工作並理解['TabelModel#getColumnClass']的重要性(http://docs.oracle.com/ javase/7/docs/api/javax/swing/table/TableModel.html#getColumnClass(int))方法以及它如何影響呈現的內容 – MadProgrammer

+0

真的,我閱讀了如何使用4-5天的表格文章。但文章總是顯示具有默認值的創建模型。我基本理解邏輯,但當我需要從resultset中檢索數據時,我陷入了困境。 –

+1

請參閱[編輯器和渲染器]一節(http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender),其中明確定義了「TableModel」的要求以便使用默認編輯/渲染器。然後查看鏈接的[demo](http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/components /TableDemoProject/src/components/TableDemo.java),這清楚地表明瞭所討論的概念。請求代碼不是這個論壇的工作方式 – MadProgrammer

回答

0

最後我解決了這個問題。讓我分享我的代碼;

Table Model Class;

class MyTableModel extends AbstractTableModel { 


    private String[] columnNames = {"Mach", 
            "ID", 
            "Status", 
            "IsActive"}; 

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

    public MyTableModel() {try { 
     fetchDB(); 
     } catch (Exception ex) { 
      Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void fetchDB()throws Exception{ 

     ResultSet rs; 
     Statement stmt; 
     ResultSetMetaData rsmtd; 

     String query = "select Mach,ID,Status,IsActive from Configs\n" + 
     "order by Machine,ID"; 
     try { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     String connectionUrl = "jdbc:sqlserver://192.168.100.100;" + "databaseName=DBST;" + "user=" + "user1" + ";" + "password=" + "user1pass" + ";"; 
     Connection con = DriverManager.getConnection(connectionUrl); 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery(query); 
     rsmtd = rs.getMetaData(); 


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

      } 

     } 

     catch(SQLException se){ 
     se.printStackTrace(); 
     } 
     catch (ClassNotFoundException ex) { 
      Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 


    @Override 
    public int getColumnCount() { 
     return columnNames.length; 
    } 

    @Override 
    public int getRowCount() { 
     return data.size(); 
    } 

    @Override 
    public String getColumnName(int col) { 
     return columnNames[col]; 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 

     return data.elementAt(rowIndex).elementAt(columnIndex); 
    } 



    @Override 
    public Class getColumnClass(int c) { 
     return getValueAt(0, c).getClass(); 
    } 




} 

主桂;

jTable1 = new javax.swing.JTable (new MyTableModel());