動的に追加された JTable が表示されない
質問
Java初心者はこちら。netbeans プロジェクトに追加した JFrame があり、それに JTable を作成する次のメソッドを追加しました。問題は、何らかの理由で、このメソッドを呼び出すと、JTable が表示されないことです。助言がありますか?
public void showFromVectors(Vector colNames, Vector data) {
jt = new javax.swing.JTable(data, colNames);
sp = new javax.swing.JScrollPane(jt);
//NB: "this" refers to my class DBGridForm, which extends JFrame
this.add(sp,java.awt.BorderLayout.CENTER);
this.setSize(640,480);
}
このメソッドは次のコンテキストで呼び出されます。
DBGridForm gf = new DBGridForm(); //DBGridForm extends JFrame
DBReader.outMatchesTable(gf);
gf.setVisible(true);
...ここで、DBReader.outMatchesTable() は次のように定義されます。
static public void outMatchesTable(DBGridForm gf) {
DBReader ddb = new DBReader();
ddb.readMatchesTable(null);
gf.showFromVectors(ddb.lastRsltColNames, ddb.lastRsltData);
}
おそらく、使用しているスイング クラスか Java について、何か見落としているのではないかと思います。何か案は?
解決
あなたの文脈における「これ」は不明瞭です。アプレットの中にあるのでしょうか?Jフレーム?
レイアウトに問題がある可能性があります。新しいボーダーレイアウトを使用してクラスで setLayout を呼び出したことを確認してください。
Swing アプリケーションでは、バージョンに応じて、生の add() の代わりに getRootContentPane().add() を使用する必要があります。
最上位コンテンツの追加に関する Java チュートリアル: http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html
他のヒント
イベント スレッドで実行していない場合は、問題が発生している可能性があります。これが原因で表示されない問題が発生していることを確認しました。
このコードが AWT イベント (マウスのクリック、ボタンの押下など) に応答して呼び出される場合は問題ありませんが、アプリを開始したスレッドと同じである場合、またはこのコードがタイマーで実行されている場合は、問題が発生する可能性があります。ご無事で。