JTable を使用して Java テーブルを作成する方法

藏色散人
リリース: 2019-01-17 15:15:29
オリジナル
4982 人が閲覧しました

Java は、Java の Swing API コンポーネントを使用してグラフィカル ユーザー インターフェイスを開発するときにテーブルを作成できる JTable と呼ばれる便利なクラスを提供します。ユーザーにデータの編集を許可したり、データの表示のみを許可したりできます。テーブルには実際にはデータが含まれていないことに注意してください。これは純粋に表示メカニズムです。

JTable を使用して Java テーブルを作成する方法

注: 他の Swing GUI と同様に、JTable を表示するコンテナを作成する必要があります。

配列を使用したテーブル データの格納

JTable クラスにデータを提供する簡単な方法は、2 つの配列を使用することです。最初の配列は列名を String 配列に保存します。

String[] columnNames = {"First Name", "Surname", "Country"
, "Event", "Place", "Time", "World Record" };
ログイン後にコピー

2 番目の配列は、テーブルのデータを保存するために使用される 2 次元のオブジェクト配列です。たとえば、この配列には 6 人のオリンピック水泳選手が含まれています。

Object[][] data = {
{"César Cielo", "Filho", "Brazil", "50m freestyle",1 , "21.30", false },
{"Amaury", "Leveaux", "France", "50m freestyle", 2, "21.45", false },
{"Eamon", "Sullivan", "Australia", "100m freestyle", 2, "47.32", false },
{"Michael", "Phelps", "USA", "200m freestyle", 1, "1:42.96", false },
{"Ryan", "Lochte", "USA", "200m backstroke", 1, "1:53.94", true },
{"Hugues", "Duboscq", "France", "100m breaststroke", 3, "59.37", false }
};
ログイン後にコピー

ここで重要なのは、両方の配列の列数が同じであることを確認することです。

JTable の構築

データを取得したら、テーブルを作成するのは簡単な作業です。 JTable コンストラクターを呼び出して、2 つの配列を渡すだけです。

JTable table = new JTable(data, columnNames);
ログイン後にコピー

ユーザーがすべてのデータを確実に確認できるように、スクロール バーを追加することもできます。これを行うには、その JTable を JScrollPane に配置します。

JScrollPane tableScrollPane = new JScrollPane(table);
ログイン後にコピー

テーブルが表示されると、データの列と行が表示され、上下にスクロールできます。

JTable オブジェクトは対話型のテーブルを提供します。任意のセルをダブルクリックすると、内容を編集できます。ただし、編集は GUI にのみ影響し、基になるデータには影響しません。 (データへの変更を処理するには、イベント リスナーを実装する必要があります。)

列の幅を変更するには、列ヘッダーの端にマウスを置き、前後にドラッグします。列の順序を変更するには、列見出しをクリックしたまま、新しい場所にドラッグします。

列の並べ替え

行を並べ替える機能を追加するには、 setAutoCreateRowSorter メソッドを呼び出します。

table.setAutoCreateRowSorter(true);
ログイン後にコピー

このメソッドが true に設定されている場合、次のことができます。列ヘッダーをクリックすると、その列の下のセルの内容に基づいて行が並べ替えられます。

テーブルの外観を変更する

グリッド線の表示/非表示を制御するには、次の setShowGrid メソッドを使用します。

table.setShowGrid(true);
ログイン後にコピー

テーブルの色を指定するには、setBackground メソッドと setGridColor メソッドを使用してください:

table.setGridColor(Color.YELLOW);
table.setBackground(Color.CYAN);
ログイン後にコピー

デフォルトでは、テーブルの列幅は同じです。テーブルが入っているコンテナのサイズが変更可能な場合、列の幅が伸縮し、コンテナが大きくなったり小さくなったりします。ユーザーが列のサイズを変更すると、新しい列のサイズに合わせて右側の列の幅が変更されます。

setPreferredWidth メソッドまたは列を使用して、初期列幅を設定できます。 TableColumn クラスを使用して最初に列への参照を取得し、次に setPreferredWidth メソッドを使用してサイズを設定します。

TableColumn eventColumn = table.getColumnModel().getColumn(3);
eventColumn.setPreferredWidth(150);
TableColumn placeColumn = table.getColumnModel().getColumn(4);
placeColumn.setPreferredWidth(5);
ログイン後にコピー

Select row

デフォルトでは、ユーザーは次のことを実行できます。次の 3 つの方法のいずれかでこれを実行します。 1. テーブルの行を選択します。

単一の行を選択するには、その行内のテーブルのセルをクリックします。

連続する複数の行を選択するには、複数の行上でマウスをドラッグするか、Shift Cell を押しながら表のセルをクリックします。

連続していない複数の行を選択するには、Ctrl キー (Mac では Command キー) を押したままテーブルのセルをクリックします。

テーブル モデルの使用

編集可能な単純な文字列ベースのテーブルが必要な場合は、テーブル データとして複数の配列を使用すると便利です。作成したデータ配列を見ると、そこに含まれる他のデータ型は文字列です。Place 列には int が含まれ、World Record 列にはブール値が含まれています。ただし、両方の列は文字列として表示されます。この動作を変更するには、テーブル モデルを作成します。

テーブルモデルは、テーブルに表示するデータを管理します。テーブル モデルを実装するには、AbstractTableModel クラスを拡張するクラスを作成できます。

public abstract class AbstractTableModel extends Object implements TableModel, Serializable{
public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);
public String getColumnName(int column;
public boolean isCellEditable(int rowIndex, int columnIndex);
public Class getColumnClass(int columnIndex);
}
ログイン後にコピー

上記の 6 つのメソッドは、このステップバイステップ ガイドで使用されるメソッドですが、AbstractTableModel クラスはさらに多くのメソッドを定義しています。オブジェクト内の JTable データを操作するために使用できます。 AbstractTableModel を使用するようにクラスを拡張する場合、実装する必要があるのは getRowCount、getColumnCount、および getValueAt メソッドのみです。

上記の 5 つのメソッドを実装する新しいクラスを作成します。

class ExampleTableModel extends AbstractTableModel{
String[] columnNames = {"First Name", "Surname", "Country"
, "Event", "Place", "Time", "World Record" };
Object[][] data = {
{"César Cielo", "Filho", "Brazil", "50m freestyle",1 , "21.30", false },
{"Amaury", "Leveaux", "France", "50m freestyle", 2, "21.45", false },
{"Eamon", "Sullivan", "Australia", "100m freestyle", 2, "47.32", false },
{"Michael", "Phelps", "USA", "200m freestyle", 1, "1:42.96", false },
{"Larsen", "Jensen", "USA", "400m freestyle", 3, "3:42.78", false },
};
@Override
public int getRowCount()
{
return data.length;
}
@Override
public int getColumnCount()
{
return columnNames.length;
}
@Override
public Object getValueAt(int row, int column)
{
return data[row][column];
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}@Override
public boolean isCellEditable(int row, int column)
{
if (column == 1 || column == 2)
{
return false;
}
else
{
return true;
}
}
}
ログイン後にコピー

この例では、ExampleTableModel クラスがテーブル データを含む 2 つの文字列を保持するのが理にかなっています。次に、getRowCount、getColumnCount、getValueAt、および getColumnName メソッドは、配列を使用してテーブルの値を提供できます。また、最初の 2 つの列の編集を無効にするために isCellEditable メソッドがどのように記述されているかにも注意してください。

これで、JTable では、2 つの配列を使用してオブジェクトを作成する代わりに、次の ExampleTableModel クラスを使用できるようになります:

JTable table = new JTable(new ExampleTableModel());
ログイン後にコピー

コードを実行すると、JTable オブジェクトがテーブル モデルを使用していることがわかります。テーブルがないため、セルは編集可能であり、列名は正しく使用されます。 getColumnName メソッドが実装されていない場合、テーブル上の列名は、A、B、C、D などのデフォルト名として表示されます。

我们现在考虑一下该方法 getColumnClass。仅这一点使得表模型值得实现,因为它为JTable对象提供了每列中包含的数据类型。如果您还记得,对象数据数组有两列不是String数据类型:Place包含int的World Record列和包含的列booleans。了解这些数据类型会更改JTable对象为这些列提供的功能。运行带有表模型的示例表代码意味着该World Record列实际上将是一系列复选框。

添加ComboBox编辑器

您可以为表中的单元格定义自定义编辑器。例如,您可以使组合框替换字段的标准文本编辑。

以下是使用JComboBoxcountry字段的示例 :

String[] countries = {"Australia", "Brazil", "Canada", "China"
,"France", "Japan", "Norway", "Russia", "South Korea"
, "Tunisia", "USA"};
JComboBox countryCombo = new JComboBox(countries);
ログイン後にコピー

要设置country列的默认编辑器,请使用TableColumn该类获取对country列的引用,并使用该setCellEditor方法将该列设置JComboBox为单元格编辑器:

TableColumn countryColumn = table.getColumnModel().getColumn(2);
countryColumn.setCellEditor(new DefaultCellEditor(countryCombo));
ログイン後にコピー

以上がJTable を使用して Java テーブルを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート