0

내 JTable (보기에서)에서 테이블 모델을 분리하는 데 문제가 있습니다. 내 모델에 데이터를 가져 오는 데 필요한 쿼리가 포함되어 있습니다. buildTableModel() 방법으로 데이터베이스 :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(); 
    } 

는 그리고이 부분이다 나는 문제지고있어 여기서 때 Apparentlly JTable 그래서 처음에이 도착하는 DefaultTbaleModel 개체를 변경할 수 없습니다

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(); 
       } 

을 '나는 항상 빈 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(); 
} 

코드 만이 필드를 변경 위는 (최초 생성자 설정 예 productTable 등) JTable 인스턴스 TableModel에 변경되지 않는다. JTable 인스턴스 자체를 호출하여 모델 백업을 실제로 변경합니다. JTable 예 : productTable.setModel(dt);