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