2016-09-01 11 views
0

テーブルモデルを(ビューの)JTableから分離する際に問題があります。マイモデルには、データを取得するために必要なクエリが含まれています。MVCアーキテクチャのDefaultTableModelからJTableへのデータの取得

Model.java

public static DefaultTableModel buildTableModel(ResultSet rs) 
      throws SQLException { 

     ResultSetMetaData metaData = rs.getMetaData(); 

     // names of columns 
     Vector<String> columnNames = new Vector<String>(); 
     int columnCount = metaData.getColumnCount(); 
     for (int column = 1; column <= columnCount; column++) { 
      columnNames.add(metaData.getColumnName(column)); 
     } 

     // data of the table 
     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); 
     } 

     return new DefaultTableModel(data, columnNames); 

    } 

    //queries to execute for Jtable model listProduit 
    public ResultSet productList()throws SQLException{ 
     ResultSet rs = stmt.executeQuery("SELECT * from Lot"); 

     return rs; 
    } 

View.java

public class View extends JPanel{ 


    public DefaultTableModel dt; 

    public JTable productTable; 

    private JScrollPane scrolPane; 

    public ListProduit(){ 


     productTable=new JTable(dt); 

     this.setLayout(new GroupLayout(this)); 
     this.setBackground(Color.decode("#CFDBC5")); 

     productTable.setPreferredScrollableViewportSize(new Dimension(500,50)); 
     productTable.setFillsViewportHeight(true); 

     scrolPane= new JScrollPane(productTable); 
     this.add(scrolPane); 

     this.setVisible(true); 


    } 

//setter for the table model 
public void setDt(DefaultTableModel dt) { 
     this.dt = dt; 
     this.dt.fireTableDataChanged(); 
    } 
buildTableModel()方法を使用してデータベース

そして、これは私が問題を取得しています一部です:

Controller.java

  try{ //lines of the problem: 
        ResultSet rs= model.productList(); 
        DefaultTableModel dtm = Model.buildTableModel(rs); 
        View.setDt(dtm); 
        // Stuff to handle showing the view 
        showFourthCard(); 
        panelList.add(4); 
       }catch(SQLException ex){ 
        ex.printStackTrace(); 
       } 

とき、私Apparentlly JTableはそうは初めてでそれを取得することをDefaultTbaleModelオブジェクトを変更することはできません私はいつも空のJTableを実行しています。つまり、短いので、私のController.javaに新しいDefaultTableModelオブジェクトを設定することはできません。

注:(私はテーブルモデルを設定する必要はありませんので)私はMVCを使用していないときこれは、うまく動作しますので、ここで私の問題は、テーブルモデルからのJTableの分離に主にあります。要するに、私は私のController.javaに新しいDefaultTableModelのオブジェクトを設定することはできませんので

答えて

2

Apparentlly JTableは、私は常に空白のJTableを取得し実行していたとき、それは、その最初の時間になっていることDefaultTbaleModelオブジェクトを変更することはできません。

public void setDt(DefaultTableModel dt) { 
    this.dt = dt; 
    this.dt.fireTableDataChanged(); 
} 

コードのみフィールドを変更する上に、それはJTableインスタンスのTableModel(最初コンストラクタで設定されている、例えばproductTableを)変化しません。 JTableインスタンス自体に電話をかけて、モデルを実際に変更するモデルを変更してくださいJTable例:productTable.setModel(dt);

関連する問題