class TableRowHeaderDemo {
public static void main(String[] args) {
new TableRowHeaderFrame();
}
}
class TableRowHeaderFrame extends JFrame {
private static final long serialVersionUID = 1L;
public TableRowHeaderFrame() {
DefaultTableModel model = new DefaultTableModel(30, 10);
JTable table = new JTable(model);
/* 将table加入JScrollPane */
JScrollPane scrollPane = new JScrollPane(table);
/* 将rowHeaderTable作为row header加入JScrollPane的RowHeaderView区域 */
scrollPane.setRowHeaderView(new RowHeaderTable(table, 40));
this.getContentPane().add(scrollPane, BorderLayout.CENTER);
this.setVisible(true);
this.setSize(400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
/**
* 用于显示RowHeader的JTable,只需要将其加入JScrollPane的RowHeaderView即可为JTable生成行标题
*/
class RowHeaderTable extends JTable {
private static final long serialVersionUID = 1L;
public JTable refTable;// 需要添加rowHeader的JTable
public void valueChanged(ListSelectionEvent e) {
this.tableShow.repaint();
}
private boolean isSelect(int row) {
int[] sel = reftable.getSelectedRows();
for (int i = 0; i < sel.length; i++)
if (sel[i] == row)
return true;
return false;
}
}
/**
* 用于显示表头RowHeader的JTable的TableModel,不实际存储数据
*/
class RowHeaderTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private int rowCount;// 当前JTable的行数,与需要加RowHeader的TableModel同步
public RowHeaderTableModel(int rowCount) {
this.rowCount = rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public int getRowCount() {
return rowCount;
}
public int getColumnCount() {
return 1;
}
public Object getValueAt(int row, int column) {
return row;
}
}