デフォルトセルレンダラーを使って中央揃えにする方法

前の記事「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 メソッドでセルレンダラーを新しく作成したものに差し替えています。

以上で中央揃えが実現できました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門