JTable에 관련된 클래스
1. 테이블의 모델을 형성하는 클래스
테이블의 모양(모델)을 형성하는 클래스류로는 TableModel, AbstractTableModel, DefaultTableModel가 있다. 다음 표는 이들 클래스에 대한 설명이다.
클래스 |
설명 |
TableModel | 테이블의 데이터에 대한 접근 통로를 제공하는 인터페이스다. |
AbstractTableModel | TableModel를 구현한 클래스이다. 개발자가 직접 모델을 정위해서 사용하려면 이 클래스를 상속받아 사용한다. |
DefaultTableModel | AbstractTableModel를 상속하는 클래스로서 AbstractTableModel이 구현하지 않은 나머지 메서드들도 모두 구현되어 있다. |
2. 테이블의 열(column)을 관리하는 클래스
테이블의 열 혹은 열들을 관리하는데 관여하는 클래스는 TableColumn, TableColumnModel, DefaultTableColumnModel이다. 열 관리는 새로운 열추가, 기존의 열 제거, 다른위치로 열 이동, 열 선택 등이 있다.
클래스 |
설명 |
TableColumn | 하나의 열을 나타낸다. |
TableColumnModel | 여러 열들을 통합 관리하기위한 인터페이스 |
DefaultTableColumnModel | JTable을 위해 JTableColumnModel의 기본 구현을 제공한다. |
3. 테이블의 셀을 관리하는 클래스
테이블의 셀을 관리하는 클래스는 TableCellRenderer, TableCellEditor이다. 칼럼에는 같은 종류의 형태로
이루어진 것이 많으므로 하나의 칼럼당 하나의 TableCellRenderer와 TableCellEditor를 제공한다.
클래스 |
설명 |
TableCellRenderer | 셀의 내용을 화면에 나타내는 인터페이스 |
TableCellEditor | 셀을 편집하는 인터페이스 |
====================================================================================================
/*
* 작성자: 블로그 주인장 (creazier)
* 작성일자: 2009.04.08
* 작성계기: 누가 물어봐서...쉽게 간단하게 만들어 본 예제
*/
package src;
import! javax.swing.table.*;
import! javax.swing.*;
import! java.sql.*;
class Test extends JFrame
{
private JTable jTable;
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
private ResultSetMetaData rsmd;
private Object[] col;
private Object[][] data;
/* SQL server 2005 Express Edition */
final static String connStr =
"jdbc:sqlserver://localhost:1079;databaseName=Test;user=********;password=***********;";
final static String _driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
public Test()
{
initialize();
}
private void initialize()
{
try
{
Class.forName(_driver);
conn = DriverManager.getConnection(connStr);
String sql = "select * from student";
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// ↑ getResultSetSize 함수에서 last()함수를 사용하기 위해서 설정
// 사실 여기서는 쿼리문으로 사이즈를 알아오는 것이 훨씬 효율적이다.
rs = pstmt.executeQuery();
rsmd = rs.getMetaData();
col = new Object[rsmd.getColumnCount()];
for(int i=1; i<=rsmd.getColumnCount(); i++)
{
col[i-1] = rsmd.getColumnName(i);
}
int initNum = getResultSetSize(rs);
data = new Object[initNum][];
int index = 0;
while(rs.next())
{
data[index++] = new Object[]{rs.getInt(1), rs.getString(2), rs.getString(3)};
}
}
catch(SQLException sqlExecption)
{
sqlExecption.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
finally
{
try { rs.close(); conn.close();}
catch(Exception e1){e1.printStackTrace();}
}
DefaultTableModel tableModel = new DefaultTableModel(data, col);
DefaultTableCellRenderer tableRender = new DefaultTableCellRenderer();
tableRender.setHorizontalAlignment(JLabel.CENTER);
jTable = new JTable(tableModel);
for(int i=0; i<jTable.getColumnCount(); i++)
{
jTable.getColumnModel().getColumn(i).setCellRenderer(tableRender); // 가운데 정렬
}
JScrollPane jsp = new JScrollPane(jTable);
// JTable은 JScrollPane에 넣어서 보여주어야 합니다.
this.add(jsp);
this.setTitle("JFrame");
this.setSize(413, 235);
this.setVisible(true);
}
private int getResultSetSize(ResultSet resultSet) throws SQLException // ResultSet row 수 반환
{
int size = -1;
resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();
return size;
}
public static void main(String[] args)
{
new Test();
}
}
==================================================================================================
[참고]
// 내용 수정 불가
mod = new DefaultTableModel(data,title) {
public boolean isCellEditable(int rowIndex, int mColIndex) {
return false;
}
};
// 이동, 크기 조절 불가
table1 = new JTable(mod1);
table1.getTableHeader().setReorderingAllowed(false); // 이동 불가
table1.getTableHeader().setResizingAllowed(false); // 크기 조절 불가
}
◆ Auto Resize Mode 상수정의
- AUTO_RESIZE_OFF
: 자동 크기 조절 하지 않음.
: 테이블의 크기에 따라서 수평, 수직 스크롤바가 나타남.
- AUTO_RESIZE_ALL_COLUMNS
: 한 열의 폭이 변경되면 비례적으로 테이블 내의 다른 모든 열에서 흡수.
- AUTO_RESIZE_LAST_COLUMN
: 한 열의 폭이 변경되면 마지막 열의 폭에 변경된 양이 적용됨.
- AUTO_RESIZE_NEXT_COLUMN
: 한 열의 폭이 변경되면 바로 다음의 열에 영향을 줌.
- AUTO_RESIZE_SUBSEQUENT_COLUMNS
: 한 열의 폭이 변경되면 오른쪽의 다른 모든 열들의 폭이 변경됨.
'IT_Programming > Java' 카테고리의 다른 글
[펌] 자바로 바탕화면 캡쳐하기 (0) | 2009.04.12 |
---|---|
[펌] 자바 에러 모음 (0) | 2009.04.12 |
[펌_ jdbc] ResultSet 크기 구하기 (0) | 2009.04.08 |
[펌] Generics 튜토리얼 (0) | 2009.03.24 |
웹 브라우저 실행하기 (0) | 2009.02.03 |