2013-02-23 2 views
1

클래스 A에 메소드가 있고 클래스 B (기본 GUI)에서 해당 메소드를 호출하려고하지만 클래스 A가 클래스 B 내의 jTable에서 일부 작업을 수행해야합니다.jTable 업데이트 - 매개 변수로 jTable 전달

DB에 연결해야하기 때문에이 메서드를 클래스 B 내에 두지 않고 GUI에 그러한 메서드를 저장하지 않으려합니다. 나는 그것이 모델의 설정 유형의 JTable의 매개 변수를 전달해야

public void populatejTable(TableModel x) { 
    try { 
     String stmt = "SELECT * FROM APP.DATAVAULT"; 
     PreparedStatement ps = Main.getPreparedStatement(stmt); 
     ResultSet rs = ps.executeQuery(); 
     x.setModel(DbUtils.resultSetToTableModel(rs)); 
     ps.close(); 
     rs.close(); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

: 여기

는 클래스 A에서 코드입니다. 나는 String, int 등의 모든 다른 일반적인 데이터 유형을 시도했다. 심지어 jTable과 TableModel을 시도했다.

나는이 일을 실제로하지 않겠다고 생각하지만,이 문제를 해결하기위한 더 좋은 방법은 없을 것입니다. 여기

코드 (내 GUI) 클래스 B 내에서이 메소드를 호출한다 :

//table 
Account acc = new Account(); 
acc.populatejTable(datavaultjTable); 

어떻게이 일을 가야 하는가? 클래스 A의 코드는 컴파일되지 않습니다 OS X의

답변

4

에 자바로 작성 -

나는 테이블과 GUI를 만들 수 넷빈즈 7.3 베타 2 GUI 빌더를 사용하고 있습니다. TableModel에는 setModel() 메서드가 없습니다. GUI 클래스에서 데이터베이스 관련 코드를 사용하지 않으려는 귀하의 목표는 좋은 방법이지만 데이터베이스 관련 코드에서 GUI 코드로 연결되는 경우 그 결과는 더욱 심각합니다.

GUI 클래스에는 GUI 코드 만 포함되어야합니다. 데이터 액세스 코드에는 데이터베이스 관련 코드 만 포함되어야합니다. GUI는 데이터베이스 액세스 코드의 메소드를 호출하여 데이터를 가져와야합니다. JTable 인스턴스 또는 심지어 TableModel 인스턴스를 데이터 액세스 코드로 전달해서는 안됩니다.

public class GUI { 
    private JTable table; 
    private MyTableModel tableModel; 
    private DataAccess dataAccess; 
    ... 

    public void fillTableWithDataFromDatabase() { 
     List<Product> products = dataAccess.getProductsFromDatabase(); 
     tableModel.setProducts(products); 
    } 
} 

public class DataAccess { 
    public List<Product> getProductsFromDatabase() { 
     // TODO: 
     // create an empty list 
     // execute a query 
     // loop through each row 
     // for each row, create a Product instance and add it to a list 
     // return the list 
    } 
} 
+0

좋습니다. 덕분에 많은 일이 발생하지 않았을 것입니다. GUI 빌더로 만든 jTables를 채우기 위해 온라인에서 찾은 .jar을 사용하면서 코드가 컴파일되지 않습니다. 드로잉 보드로 돌아 가기! 코드 예제를 주셔서 감사합니다. –

+0

MyTableModel이 아닌 Private TableModel이 될까요? 나는 여기서 뭔가를 놓치고있는 것을 편집하고 싶지는 않지만 99 % 확신합니다. –

+0

TableModel은 인터페이스입니다. 이 인터페이스의 구현을 사용해야합니다. MyTableModel은'Product'의 인스턴스를 표시하고 테이블에 의해 표시되는 제품을 대체하는'setProducts()'메소드를 가진 그런 구현물 (예를 들어 AbstractTableModel을 확장)이 될 것입니다. –