デフォルトセルレンダラーを使って中央揃えにする方法
前の記事「JTable でのデータの表示方法を決める セルレンダラー」では、 JTable がセルを描画する際には、セルレンダラーを使うということを説明しました。
また、デフォルトセルレンダラーが用意されていて、それがデータ型毎に適切にセルを描画するということも説明しました。
ここでは、そのデフォルトセルレンダラーを少しいじって、文字を中央揃えで表示してみましょう。
具体的には、これまで次のように表示されていました。
この最初のカラムを中央揃えにして、次のようにします。
デフォルトセルレンダラーをいじる、という仕組みについては既に説明しましたので、早速コードをみてみましょう。
まず、データモデルについてはこれまでと同じものを使います。
package com.keicode.java.testapp;
import javax.swing.table.AbstractTableModel;
@SuppressWarnings("serial")
class MyTableModel2 extends AbstractTableModel {
Object[][] data = {
{"X", "100", true},
{"X", "200", false},
{"X", "300", false},
{"Y", "400", false},
{"Y", "500", false},
{"Z", "600", false},
{"Z", "700", false}};
String[] columns = {"Column 0", "Column 1", "Column 2"};
@Override
public Class<?> getColumnClass(int columnIndex) {
return data[0][columnIndex].getClass();
}
@Override
public String getColumnName(int column) {
return columns[column];
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
}
JTable は次のようにします。
package com.keicode.java.testapp;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
@SuppressWarnings("serial")
public class TableTest14 extends JFrame {
public TableTest14() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(350, 150);
JTable table = new JTable();
MyTableModel2 tableModel = new MyTableModel2();
table.setModel(tableModel);
DefaultTableCellRenderer tableCellRenderer = new DefaultTableCellRenderer();
tableCellRenderer.setHorizontalAlignment(JLabel.CENTER);
TableColumn col = table.getColumnModel().getColumn(0);
col.setCellRenderer(tableCellRenderer);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TableTest14 app = new TableTest14();
app.setVisible(true);
}
});
}
}
DefaultTableCellRenderer のインスタンスを作成し、それの setHorizontalAlignment メソッドに JLabel.CENTER を渡すことで中央揃えを指定しています。
次に、データモデルから最初のカラムのカラム情報を TableColumn として取得して、setCellRenderer メソッドでセルレンダラーを新しく作成したものに差し替えています。
以上で中央揃えが実現できました。