2012-04-03 4 views
3

私はカスタムAbstractTableModelを作成しました。コンストラクタは、ファイルからのデータでモデルを初期化します。ただし、モデルに余分な列を追加したい(これは列のSQL制限のためです)。Java:fireTableStructureChangedをAbstractTableModelに変更する方法

私は、初期化コードにaddColumn(String columnName、Vector columnData)メソッドの呼び出しを追加することでこれを達成しようとしています。

私のカスタムAbstractTableModelのこのaddColumnメソッドは、 "fireTableStructureChanged()"を含むDefaultTableModelのaddColumnメソッドから直接派生しています。

しかし、このコードを実行するとfireTableStructureChanged()は新しいColumnを追加しないように見え、JTableの表示はファイルのデータのみで行われます。これはなぜでしょうか?ここで

は、私が使用していたコードの短い徴候である:

public class Dummy extends AbstractTableModel { 
    public Dummy() { 
     //load data from SQL file into ResultSets 
     //transfer ResultSet.metadata into columnHeaders Vector<String> 
     //transfer ResultSet.data into columnDatums Vector<String> 
     fireTableChanged(null); 
     addColumn("Added Heading", (Vector)null); 
    } 

    public addColumn(String columnHeader, Vector columnData) { 
     columnHeaders.add(columnHeader); 
     // transfer columnData into columnDatums 
     fireTableStructureChanged(); 
    } 
} 

は、それがリスナーの問題です - )(fireTableStructureChangedにこの時点で聴くものではありませんか?

+0

Java命名規則を学び、それらに固執してください。 – kleopatra

+0

@kleopatra - ありがとう、しかし私はそれらを知っています。ダミーはstackoverflowの目的のためのスローアウェイクラスの名前にすぎません! – Arvanem

+0

それは潜在的なヘルパーの目を傷つけています:-)あなたが望むものにすることはできません... – kleopatra

答えて

4

あなたはAbstractTableModelTableModelインタフェースで指定された3 必要(すなわち未実装)メソッドの実装を明らかにする必要があります。特に、getColumnCount()getRowCount()は、更新された値を返す必要があります。 fireXxx()のメソッドは、ビューにgetValueAt()でモデルを照会するよう指示します。検索するには、getValueAt()を待つ間にデータがそこになければなりません。 EnvTableTestは簡単な例です。また、Vectorに代わるより現代的な代替案を検討してください。これには、おそらく未確認の同期コードが含まれています。

+0

+1あなたの思いやりのある深い応答。私は方法を見直して、あなたが提案する方法で問題を解決しようとします。それがうまくいくなら私はあなたの答えを受け入れるでしょう。私が苦労しているなら、私は質問にコードを追加します。多くのありがとう – Arvanem

+0

あなたはかなり正しかったです。私はgetColumnCount()とgetRowCount()が更新された値を返すようにしなければなりませんでした。偉大な答えと洞察力に感謝します。 – Arvanem

+0

あなたは大歓迎です。それがうれしいです。参考までに[抽象クラスがインタフェースを実装する場合](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)も参照してください。 – trashgod