1

私は非常に新しいのでJTable、それに関するたくさんの情報に当惑しています。皆さんが答えてほしい質問がいくつかあります。

  1. 各セルの値を個別に設定するにはどうすればよいですか?TableModel(これの使い方はよくわかりません)の実装によるものですか?2Dマトリックスを使用して事前にデータを設定できることを理解しています。
  2. 以下のテーブルのヘッダーが適切に配置されるようにするにはどうすればよいですか(エントリが完全に表示されます)。表の最初のエントリを注意深く見ると、ジョブグレードは部分的に非表示になっています。私はこれに対する解決策を高低で探しましたが、役に立ちませんでした。

http://i45.tinypic.com/24pxvmx.jpg

4

3 に答える 3

1

JTableは、Swingの最も洗練されたコンポーネントの1つです。ですから、キックスタートを与えるには少し時間がかかります。しかし、それを理解すると、JTableが非常に強力で柔軟性があることがわかります。そうは言っても、あなたの質問に答えてみましょう。

1)各セルの値を個別に設定するにはどうすればよいですか?TableModelの実装によるものですか(これを使用する方法がよくわかりません)?2Dマトリックスを使用して事前にデータを設定できることを理解しています

JTableは、データにTableModelインスタンスを使用します。事前にデータがロードされた使用可能な配列またはベクトルがある場合は、DefaultTableModelを使用するだけです。DefaultTableModelが要件に対して十分な柔軟性を備えていない場合は、AbstractTableModelを拡張してTableModelを実装することを躊躇しないでください。AbstractTableModelには次の3つの抽象メソッドしかないため、AbstractTableModelを拡張することで具体的なTableModelを実装するのは非常に簡単です。:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

2)下の表のヘッダーが適切に配置されるようにするにはどうすればよいですか(エントリが完全に表示されます)?表の最初のエントリを注意深く見ると、ジョブグレードは部分的に非表示になっています。私はこれに対する解決策を高低で探しましたが、役に立ちませんでした。 http://i45.tinypic.com/24pxvmx.jpg

列幅を自動的に設定する例は、次の場所にあります。http: //www.exampledepot.com/egs/javax.swing.table/PackCol.html このリンクのコード例では、すべての列データを使用して優先列幅を計算しています。私はそれがあなたの要件にも適応できると思います。

于 2012-05-21T10:20:36.467 に答える
1

上でコメントしたように、最善の方法はhttp://docs.oracle.com/javase/tutorial/uiswing/components/table.htmlを参照することです。

しかし、あなたの2つの特定の質問に答えるには:

1) はい、TableModel が必要です。配列を渡すことで新しい JTable を作成できますが、とにかくバックグラウンドで DefaultTableModel を作成するだけです。モデルが必要な理由の詳細については、Model-View-Controller アーキテクチャを参照してください。

2)このようなもので列に好みの幅を設定できます

table.getColumnModel().getColumn(1).setPreferredWidth(100);

これにより、列1に100ピクセルの優先幅が与えられます(ピクセルだと思います...ただし、引用しないでください!)。

于 2012-05-21T10:03:21.117 に答える
1

概念は、DefaultTableModel を独自のクラスでサブクラス化することです。たとえば、ジョブのテーブルを表示したい場合は、JobsTableModel というクラスを作成できます。JobsTableModel は通常、コンストラクターに渡される Job 型のオブジェクトのコレクションを持ちます。JobsTableModel は、次の質問に対する回答を提供できる必要があります。

  1. 列は何列ありますか
  2. 列はいくつありますか
  3. 列 X の名前は何ですか
  4. 列 X のデータ型は何ですか
  5. セル (X,Y) の値は何ですか

これは、次のメソッドをオーバーライドすることによって行われます。

public int getRowCount()
public int getColumnCount()
public String getColumnName(int columnIndex)
public Class<?> getColumnClass(int columnIndex)
public Object getValueAt(int rowIndex, int columnIndex)

JTable の実装では、この情報を使用してテーブルにデータを入力できます。各セルに値を設定する必要はありません。さらに、JTable の実装により、並べ替えと列の並べ替えが無料で自動的に行われます。各セルに直接データを入力する必要がある場合、これらを扱うのは悪夢です。

幅を正しくすることに関しては、これを自動的に行う方法はないと思います。試行錯誤を繰り返すだけです。次のように、列の幅をピクセル単位で設定できます。

TableColumn column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(width);
于 2012-05-21T10:10:43.860 に答える