JTable aggiunto dinamicamente non visualizzato
Domanda
Principiante Java qui. Ho un JFrame che ho aggiunto al mio progetto netbeans e vi ho aggiunto il seguente metodo, che crea una JTable. Il problema è che, per qualche motivo, quando chiamo questo metodo, JTable non viene visualizzato. Qualche suggerimento?
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);
}
Il metodo viene chiamato nel seguente contesto:
DBGridForm gf = new DBGridForm(); //DBGridForm extends JFrame
DBReader.outMatchesTable(gf);
gf.setVisible(true);
... dove DBReader.outMatchesTable () è definito come
static public void outMatchesTable(DBGridForm gf) {
DBReader ddb = new DBReader();
ddb.readMatchesTable(null);
gf.showFromVectors(ddb.lastRsltColNames, ddb.lastRsltData);
}
La mia ipotesi è che sto trascurando qualcosa, sia sulle classi swing che sto usando, sia su Java. Qualche idea?
Soluzione
" questo " nel tuo contesto non è chiaro. È dentro un'applet? un JFrame?
Potresti avere un problema di layout, assicurati di aver chiamato setLayout sulla tua classe con un nuovo borderlayout.
In un'applicazione swing, si desidera utilizzare getRootContentPane (). add () anziché un add () non elaborato, a seconda della versione.
Tutorial Java sull'aggiunta di contenuti di alto livello: http: //java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html
Altri suggerimenti
Se non sei in esecuzione sul thread degli eventi, potrebbe trattarsi di un problema: ho visto che le cose non vengono visualizzate.
Se questo codice viene chiamato in risposta a un evento AWT (clic del mouse, pulsante, ecc.), non è questo il problema, ma se è ancora lo stesso thread che ha avviato la tua app o se questo codice sta per scadere timer, potrebbe benissimo essere.