2009-04-27 20 views
2

JTableに行を挿入する際に問題があり、問題が何か分かりません。JTableに行を挿入する際の繰り返し値

は、私はこのような正確に行います。

((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray()); 

webSiteDownloaderArrayListを持って一つのオブジェクトです。配列getWebSitesを呼び出すことができます。

問題は、1つの行を挿入して2番目の行を追加すると、JTableは最初の行のみを表示しますが、2回繰り返すということです。私は十分にクリアされましたか?

Thks:D

答えて

3

私は暗闇の中にショットを取ると、あなたはこのような何かを達成したいと思います:

DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel(); 
for (MyRowObject row : webSiteDownloader.getWebSites()) { 
    dtm.insertRow(0, row.toArray()); 
} 

があなたの代わりにのinsertRowを使用している特別な理由がありますaddRowのですか?

また、私は、AbstractTableModelを拡張することによって独自の特別な目的のTableModelをロールすることをお勧めしたいと思います。基本的な未テストの例:

public class MyTableModel extends AbstractTableModel 
{ 
    protected List<MyObject> rows; 

    public MyTableModel() 
    { 
    rows = new ArrayList<MyObject>(); 
    } 

    public void add(MyObject obj) 
    { 
    rows.add(obj); 
    } 

    @Override 
    public int getRowCount() 
    { 
    return rows.size(); 
    } 

    @Override 
    public int getColumnCount() 
    { 
    // This value will be constant, but generally you'd also 
    // want to override getColumnName to return column names 
    // from an array, and in that case you can return the length 
    // of the array with column names instead 
    return 2; 
    } 

    @Override 
    public Object getValueAt(int row, int column) 
    { 
    MyObject obj = rows.get(row); 

    // Change this to match your columns 
    switch(column) { 
     case 0: return obj.getId(); 
     case 1: return obj.getName(); 
    } 

    return null; 
    } 
} 
+1

Icky code非標準の書式設定。保護された。最後の行方不明。宣言行でコンストラクタを実行できるときのコンストラクタでの初期化。返されるものもあれば、スイッチで処理されないものもあります。例外をスローするのではなく、ランダム( 'null')値を返します。 @Overrideがありません。 –

+0

フィードバックいただきありがとうございます。ちゃんと覚えておきますよ。 :) –

+0

AbstractTableModelから継承したfireXxxxEvent()メソッドを呼び出さないと、TableModelは機能しません! add()の呼び出しは、JTableをリフレッシュしません! – jfpoilpret

関連する問題