2010-02-14 6 views
1

내 JTable에 대한 내 자신의 사용자 정의 TableModel을 작성하려고합니다 (JCheckBox 행을 내 테이블에 통합하려고하기 때문에). JScrollPane뿐입니다. JCheckBox 및 사용자 정의 AbstractTableModel을 통합하기 전에 JTable을 기본 (Object [] [], Object []) 생성자를 사용하면 잘 나타납니다. Sun의 JTable 자습서에서 모든 데이터를 String으로 처리하는 기본값을 사용합니다.JScrollPane에 표시 할 사용자 정의 테이블 모델이있는 JTable 가져 오기

나는 다음 내 사용자 지정 AbstractTableModel가 만든이에서 갔다 :이 사용자 정의 만든 클래스와 JTable로를 만드는 시도를 호출한다고 가정하고

JTable table = new JTable(); 

: 여기에

JTable table = new JTable(dataArray, col); 

을 AbstractTableModel을 확장하지만 이제는 JScrollPane에 아무 것도 나타나지 않습니다.

잘못 사용하고 있습니까? Sun 자습서의 코드를 복사하고 관련된 데이터 파일의 이름 만 변경했습니다. 나는 또한 같은 클래스에이 메서드를 배치했다. 테이블을 사용자 정의 테이블 모델로 생성하는 다른 방법이 있습니까? 모든 통찰력은 인정 될 것입니다.

답변

1

JTable에는 TableModel을 매개 변수로 사용하는 여러 생성자가 있습니다. 그게 당신이 찾고있는거야? 여러분이 제공 한 코드 스 니펫 (snippet)에서 기본 생성자를 호출하고 사용자 정의 테이블 모델을 어떻게 든 사용하는 것처럼 보입니다. (어쩌면 거기에 몇 가지 코드가 누락 되었습니까?). 기본 생성자를 사용하는 경우 JTable은 내부적으로 DefaultTableModel 인스턴스를 만들고이를 사용합니다.

편집 : 댓글 그래서 여기에 추가, 잘 코드를하지 않습니다

MyTableModel model = new MyTableModel(); 
// ...initialise model if required 
JTable table = new JTable(model); 
+0

내가 혼란스러워하는 것 같아요. 데이터를 직접 받아이 JTable의 생성자 (SimpleTableDemo 처음 사용)가 있습니다 : 썬 웹 페이지 상태에 JTable의 정보 의 JTable, JTable의 (벡터 rowData 하행를 (객체 [] [] rowData 하행 [] COLUMNNAMES 개체) Vector columnNames) 그러면 다음과 같이 나타납니다. 이러한 생성자의 장점은 사용하기 쉽다는 것입니다. 그러나 이러한 생성자에는 단점이 있습니다. 이들은 모든 데이터 유형을 동일하게 (문자열로) 처리합니다. – MarcZero

+0

계속 읽어보고, 나는 AbstractTableModel을 확장하는 커스텀 클래스를 생성해야하고, 어떻게 든 생성 된 테이블이 기본 생성자 대신에 그것을 사용할 것이라는 인상을 받고있다. JTable (Object [] [], Object []) 생성자를 사용하면 모든 셀을 String으로 처리하므로 생성자없이 메서드를 호출한다고 가정합니다. JTable()은 내가 만든 사용자 정의를 사용하고, 하지만 내 화면은 이제 비어 있습니다. 나는 기본 생성자로 돌아가서 괜찮아 보이지만, 커스텀 테이블 모델을 사용할 수 없다. – MarcZero

+0

@MarcZero : 내 답변에 편집 된 내용이 표시됩니다. (이해가되지 않는다면, 코드를 더 게시 할 수도 있습니다. 나는 당신이하려고하는 것에 뭔가 빠져있을 수 있다는 느낌을 갖습니다 ...) – Ash

0

OK : 모델을 사용하는 테이블을 얻으려면, 당신은 같은 것을 할 것입니다. 내 코드를 검토 한 후에 생성자를 생략하면 사용자 정의 테이블 모델에 대한 링크를 찾지 못한다는 것을 깨달았습니다. 당신이 클래스를 생성한다면, :

class MyTableModel extends AbstractTableModel { 
//code here 
} 

을이 같은 JTable의 생성자에서 인스턴스화해야합니다

JTable table = new JTable(new MyTableModel()); 

그래서 그냥 비워두고이 새로운 "찾기"를 기대할 수 없다 AbstractTableModel 클래스

1

아시다시피 Ash는 데이터 모델을 JTable 생성자로 전달하는 중입니다. 모델 getColumnClass()Boolean.class을 반환하면 확인란 상자 렌더러 by default이 표시됩니다. 커스텀 렌더러와 에디터를 사용하는 것을 보여주는 example을 좋아할 것입니다.

0

AbstractTableModel을 확장하고 JTable의 생성자에 대한 매개 변수로 전달해야합니다. (마르크가 그렇듯이). 이것은 당신이 각 셀을 렌더링하는 방법을 JTable의 지시

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

: 필요한 방법 이외에, 당신은 실제 체크 박스를 표시하려면이 방법을 정의 할 필요가있다. 이것을 무시하면 문자열로 표시됩니다.

관련 문제