#자바를 사용해서, 특히 스윙을 사용해서 사용자 UI를 작성하다 보면 데이터베이스에서 가져온 데이터를 보여 주기 위해서 테이블 형태를 사용할 때가 많은 데, 우리가 보통 알고 있는 #JTable 클래스를 사용해서 다음의 순서대로 코드를 작성하곤 합니다.
1. JScrollPane 클래스와 JTable 클래스를 생성
보통 테이블 상의 내용이 많으니 스크롤을 사용하기 위해서 #JScrollPane 클래스를 함께 다음과 같이 사용하게 됩니다.
InfoScrollPane = new JScrollPane();
SearchResultTable = new JTable();
그런 다음, 다음과 같이 빈 테이블 모델을 정의하여 생성한 테이블에 붙이는 데요 형태는 다음과 비슷하게 되겠죠.
우선 빈 테이블 모델을 다음과 같이 만든다는 것이죠.
SearchResultTable.setModel(
new DefaultTableModel(new Object[][] { {}, {}, {}, {} }, new String[] {})
);
그런 다음 해당 테이블을 JScrollPane의 setViewportView 메서드를 사용해서 테이블을 다음과 붙이면 작업이 우선 정리가 됩니다.
InfoScrollPane.setViewportView(SearchResultTable);
아마도 결과는 다음과 같은 UI 형태가 될 것입니다.
2. 테이블 데이터 생성 - 컬럼 명 정하기
우선, 컬럼 명이 정해 졌다면 해당 컬럼을 다음과 같이 테이블에 붙이게 됩니다.
MemberInfoModel getter/setter 클래스 내에다 문자 배열로 columnCount 만큼 정의한 COLUMN_NAMES_KOR 를 TableModel 객체에 addColumn 메서드를 사용해서 붙입니다.
DefaultTableModel tm = (DefaultTableModel) SearchResultTable.getModel();
tm.setRowCount(0);
// clear existing columns
tm.setColumnCount(0);
// add specified columns to table
for (int i = 0; i < columnCount; i++ ) {
tm.addColumn(MemberInfoModel.COLUMN_NAMES_KOR[i]);
}
그런 다음, 다음과 같이 가정을 해봅니다. 데이터베이스에 있는 MemberInfo 테이블에서 리스트 형태로 받아온 데이터를 MemberInfoModel로 저장 한다음 다음과 같이 해당 컬럼에 매칭이 되도록 합쳐 주면 됩니다.
뭐 이때는 위에서 정의한 컬럼 수와 addRow로 저장되는 개수가 정확히 일치 해야 될 것입니다.
for(List<MemberInfoModel> sModelList: sList)
{
for(MemberInfoModel sModel: sModelList)
{
tm.addRow(sModel.COLUMNS());
}
}
tm.fireTableDataChanged();
테이블에 결과 값이 들어온 경우에 결과 화면은 위와 같이 코딩하였을 경우, 아래 그림과 비슷할 것입니다.
분명한 사실은, 내가 원했던 형태와는 좀 달라 보인 다는 것이죠...
제대로 나와야 하는 데 ... 이 붙어버린 형태이니 말이죠.
사실, 위의 경우를 피하기 위해서 스크롤 클래스를 붙이는 건 데, 좀 아닌 듯한 느낌을 받은 UI가 되어 버린 듯한 느낌입니다.
3. 데이블 컬럼 길이 변경하기
아래와 같이 #setAutoResizeMode를 꺼 주기만 하면 된다고 합니다.
SearchResultTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
참고 사이트:
ScrollPane 크기에 맞춰져서 위와 같은 경우가 나오기 때문에 setAutoResizeMode 메서드를 사용해서 해당 기능을 꺼주면 된다는 얘기 입니다.
결과물은 위의 모습보다 훨씬 잘 나온다는 것을 아래와 같이 확인 할 수 있었습니다.
그것과는 약간 별 개로 각 컬럼의 길이를 조정 할 수 있도록 JTable에서 제공 해 주는 메서드는 #setMinWidth 도 있습니다. 다음과 같은 코드를 넣어 주면 되는 데 일정하게 너비를 맞추는 것이라서 그냥 JTable 클래스에서 제공하는 기능에 갖다 맡겨 보는 것이 더 좋을 것 같다는 느낌이 있긴 하네요
for (int i = 0; i < columnCount; i++ ) {
SearchResultTable.getColumnModel().getColumn(i).setMinWidth(70);
}
이상.
'프로그래밍' 카테고리의 다른 글
[Java]apache commons 를 이용한 tar압축 풀기 (2) | 2023.01.19 |
---|---|
[자바] apache-commons-net FtpClient 래퍼 및 파일 다운로드 (0) | 2023.01.18 |
프로그래밍 씨,씨,씨 - 함수, union (0) | 2023.01.11 |
프로그래밍 씨,씨,씨 - 함수, union (0) | 2023.01.10 |
바이너리검색 (0) | 2022.12.28 |