1. 행 헤더 생성
- JScrollPane이 열 헤더의 뷰 포트 뿐만 아니라 행 헤더의 뷰 포트도 제공하기 때문에 매우 쉽게 구현할 수 있다.
- RowNumberTableModel.java
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
public class RowNumberTableModel extends AbstractTableModel {
private JTable mainTable;
public RowNumberTableModel(JTable table) {
mainTable = table;
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public int getRowCount() {
return mainTable.getModel().getColumnCount();
}
@Override
public Object getValueAt(int row, int column) {
return new Integer(row + 1);
}
}
- RowNumberHeader.java
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.LookAndFeel;
import jtable.datamodel.RowNumberTableModel;
public class RowNumberHeader extends JTable {
private JTable mainTable;
public RowNumberHeader(JTable table){
mainTable = table;
setModel(new RowNumberTableModel(mainTable));
setPreferredScrollableViewportSize(getMinimumSize());
setRowSelectionAllowed(false);
JComponent renderer = (JComponent) getDefaultRenderer(Object.class);
LookAndFeel.installBorder(this, "TableHeader.cellBorder");
}
@Override
public int getRowHeight(int row) {
return mainTable.getRowHeight();
}
}
- 열 헤더 추가
JScrollPane sp = new JScrollPane(table); // 테이블에 스크롤 추가
// 열 헤더 추가
JViewport jvp = new JViewport();
jvp.setView(new RowNumberHeader(table));
sp.setRowHeader(jvp);
add(sp, BorderLayout.CENTER);
- 결과 :
