JTableでヘッダを行にも列にも表示する方法
水曜日, 2月 25th, 2009javaのGUIアプリに、表を表示する機能を追加した。GUIにswingを使っていたので、JTableを使って表を表示させたが、表のヘッダを表示させる方法で詰まったので、書き残しておく。
JTableでは、ヘッダは表の上側、つまり各カラムに対して表示される。例えば以下の図のように。

このヘッダの表示には、JScrollPaneを使う。具体的なコードは以下。
[sourcecode language='java']
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
String[] columnNames = {“o”, “s”};
Object[][] data = {{0, 1}, {1,0}};
JTable table = new JTable(data, columnNames);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
}
[/sourcecode]
各カラムだけでなく、各レコードに対してヘッダを表示したい場合がある。例えば以下の図のように。

この場合は、JTableを拡張し、表の一番左のカラムをヘッダとして扱うことで実現できる。具体的なコードは以下。
[sourcecode language='java']
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
String[] columnNames = {“o”, “s”};
Object[][] data = {{0, 1}, {1,0}};
RowHeaderTable table = new RowHeaderTable(data, columnNames);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
}
class RowHeaderTable extends JTable {
public RowHeaderTable(Object data[][], Object[] columnNames) {
super(data, columnNames);
}
@Override
protected void initializeLocalVars() {
super.initializeLocalVars();
TableColumn tableColumn = super.getColumnModel().getColumn(0);
tableColumn.setCellRenderer(this.getTableHeader().getDefaultRenderer());
}
}
[/sourcecode]




