JavaのJTableで各列の幅を変更する方法をわかりやすく解説
Java Swingで表形式のデータを扱う際、デフォルトの列幅では文字が切れてしまったり、レイアウトが崩れたりすることがあります。本記事では、JTableの各列の幅を自由に変更する方法を、基本の特徴からサンプルコードまで詳しく解説します。
JTableとは
- JTableは、複雑なデータ構造を表示するためのJComponentのサブクラスです。
- MVC(Model View Controller)デザインパターンに基づいて設計されており、データを行と列の形式で表示できます。
- DefaultTableModelクラスはAbstractTableModelを拡張したクラスで、JTableに対して行や列を動的に追加する際に利用されます。
- DefaultTableCellRendererクラスはJLabelクラスを継承しており、セル内に画像や色付きテキストなどを表示するカスタマイズに使えます。
- JTableは、TableModelListener、TableColumnModelListener、ListSelectionListener、CellEditorListener、RowSorterListenerなどのリスナーインターフェースを生成できます。
- デフォルトではJTableの各列の幅は固定されていますが、
table.getColumnModel().getColumn().setPreferredWidth()メソッドを使用することで、任意の列幅に変更できます。
列幅を変更するサンプルコード
以下の例では、5つの列(番号・名・姓・メールアドレス・連絡先)を持つJTableを作成し、setPreferredWidth()メソッドによって0番目の列を狭く(5px)、3番目の列を広く(100px)設定しています。また、DefaultTableCellRendererを使って最初の列の値を中央揃えにしています。
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableTest extends JFrame {
private JTable table;
private JScrollPane scrollPane;
private DefaultTableModel model;
private DefaultTableCellRenderer cellRenderer;
public JTableTest() {
setTitle("JTable Test");
setLayout(new FlowLayout());
scrollPane = new JScrollPane();
JTable table = new JTable();
scrollPane.setViewportView(table);
model = (DefaultTableModel)table.getModel();
model.addColumn("S.No");
model.addColumn("First Name");
model.addColumn("Last Name");
model.addColumn("Email");
model.addColumn("Contact");
for(int i = 0;i < 4; i++) {
model.addRow(new Object[0]);
model.setValueAt(i+1, i, 0);
model.setValueAt("Tutorials", i, 1);
model.setValueAt("Point", i, 2);
model.setValueAt("@tutorialspoint.com", i, 3);
model.setValueAt("123456789", i, 4);
}
// 各列の幅を設定
table.getColumnModel().getColumn(0).setPreferredWidth(5);
table.getColumnModel().getColumn(3).setPreferredWidth(100);
cellRenderer = new DefaultTableCellRenderer();
cellRenderer.setHorizontalAlignment(JLabel.CENTER);
table.getColumnModel().getColumn(0).setCellRenderer(cellRenderer);
add(scrollPane);
setSize(475, 250);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTableTest();
}
}
実行結果
プログラムを実行すると、以下のように「S.No」列が狭く、「Email」列が広く表示され、列幅の指定が正しく反映されていることが確認できます。

まとめ
JTableの列幅を調整するには、getTableColumnModel()で列モデルを取得し、getColumn(インデックス)で対象の列を指定した上で、setPreferredWidth(ピクセル数)を呼び出すだけです。この手法を活用すれば、データの内容に合わせた見やすい表を簡単に作成できます。
-
Python 3.3でttk.Treeviewの列幅とstretch(伸縮)設定を変更する方法
Tkinterアプリケーションで大量のデータを表示したい場合、Treeviewウィジェットを利用すると便利です。通常、データは行と列から構成される表形式で表現されますが、Treeviewウィジェットを使えば、このような表形式のデータを簡単に画面上へ追加できます。Treeviewウィジェットの列幅を設定するには、widthプロパティとstretchプロパティを使用します。widthに指定した値がそのまま列の幅として適用され、さらにstretch=NOを指定することで、ウィンドウやウィジェットがリサイズされた際に列が自動的に伸縮しないように制御できます。サンプルコード以下の例では、プログラミング言
-
Excelで縦の列を横の行に変更する6つの簡単な方法
Excelでは、縦方向に並んだデータ(列)を横方向(行)へ変更したい場面がよくあります。例えば、報告書やプレゼン資料のレイアウト調整、データベースの形式変換など、縦持ちデータを横持ちに切り替えるニーズは意外と多いものです。本記事では、Excelで縦の列を横の行に変更できる6つの方法を、初心者の方にもわかりやすく順を追って解説します。 サンプルデータについて ここでは、複数の販売者(Seller)ごとの売上金額(Sales Amount)を記録したデータセットを使用します。この縦に並んだデータを、以下のように横方向の行へ入れ替えます(いわゆる「転置」という操作です)。 変換後のイメージは次の