1

私はこれら2つの違いについていくつかの考えを持っています。しかし、いつ使用するかについて混乱があります。私はそれを知っています、

  • JTable を表示するには、JTable を作成し、それに対応するテーブル モデルを設定します。
  • そのテーブルのデータを変更したい場合はいつでも、モデルのデータを変更すると、変更がビューに反映されます。

ビューとモデルからテーブルの値を取得できます。これは私が混乱しているところです。(行選択) のようなイベントが発生した場合、どの値を取得する必要がありますか? ビューまたはモデルからですか?JTable の並べ替えとフィルタリングを考慮して、使用するベスト プラクティスは何ですか?

4

2 に答える 2

5

テーブルのモデルまたはJTableインスタンス自体から値を取得できます。最終結果は同じです。JTablegetValueAtおよび関連するメソッドはすべて、単純に内部テーブル モデル オブジェクトに対して同じメソッドを呼び出します。

JTable#getValueAt(int, int) ソースコード:

public Object getValueAt(int row, int column) {
    return getModel().getValueAt(convertRowIndexToModel(row),
                                 convertColumnIndexToModel(column));
}
于 2012-09-05T04:39:53.863 に答える
1

私の経験則では、変更が発生した要素 (通常はイベントのソース) からデータを取得します。行選択の変更の例の場合、選択はビューに関連しているため、テーブルからデータを取得します。

これは、正しい行/列を使用しないことを避けるためです。行選択の例では、データがビュー側 ( JTable) でソートされ、モデル側が変更されていない ( TableModel) という可能性は十分にあります。その場合、行 5 が選択されたというイベントが発生した場合、それは ではなく の行 5 を意味JTableTableModelます。

これはgetValueAt、@Vulcan の回答に投稿された実装で確認できます。モデルから値を要求しますが、最初に行と列のインデックスを「ビュー座標」から「モデル座標」に変換します。

于 2012-09-05T08:02:45.480 に答える