0

それぞれ複数の列を持つ複数の JTables があります。各テーブルは、JTabbed ペインの異なるタブに表示されます。これらの列のヘッダー名はテーブル間で同じですが、列の値が異なります。ヘッダーを右クリックして比較を押すことで、すべてのテーブル間でヘッダーを比較できるようにしようとしています。これにより、選択された一致するヘッダーを持つ列のリストを渡しながら、新しい JDialog が開きます。

public void actionPerformed(ActionEvent arg0) {
                List<TableColumn> columns = new ArrayList<TableColumn>();

                for (int i = 0; i < tables.size(); i++) {

                    String tableName = tabPane.getTitleAt(i);
                    JTable tempTable = (JTable) tables.get(tableName);

                    // Get column at the channel name used
                    TableColumn col = tempTable.getColumn("chosen header");

                    // Add the column to the list of channel columns
                    columns.add(col);
                }

                new comparisonDialog(UI.getFrame(), "chosen header",
                        columns);
            }

これは正しく機能しているように見え、テーブルのすべての共通列を新しい JDialog に渡されるリストに格納します。新しい JDialog でこれらの列を含むテーブルを表示するときにも機能するようです。

JTable table = new JTable();

for (TableColumn col : passedColumnList) {
            col.setHeaderValue(col.getHeaderValue());
            table.addColumn(col);
        }

ただし、正しい列が表示されます。

  • 列のデータがすべて欠落している
  • 列のサイズを変更すると、元のテーブルの列のサイズが変更されるため、列は元のテーブルにリンクされているようです!

ここで簡単なものが欠けていますか?

4

1 に答える 1

3

まず、テーブル内のデータは、列モデルではなく、テーブル モデルによって制御されます。

第 2 に、 にTableColumnは独自のモデル ( でラップされているTableColumnModel) があり、オブジェクトへの変更は、それを監視するために登録されたすべてのモデル (したがって、それらに依存するビュー) に反映されます。

各列のデータ行を含む新しいテーブル モデルを作成し、適切な列にマップする必要があります。

基になるテーブルから列参照を "抽出" する代わりに、テーブル モデルで列情報を定義できるようにする必要があります。

于 2012-10-11T08:53:18.820 に答える