Dynamisch Hinzugefügt JTable nicht angezeigt
Java Neuling hier. Ich habe einen JFrame, den ich Hinzugefügt, um mein netbeans-Projekt, und ich habe die folgende Methode, die schafft eine JTable. Problem ist, dass aus irgendeinem Grund, wenn ich diese Methode aufrufen, wird das JTable nicht angezeigt. Irgendwelche Vorschläge?
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);
}
Die Methode aufgerufen wird, in dem folgenden Kontext:
DBGridForm gf = new DBGridForm(); //DBGridForm extends JFrame
DBReader.outMatchesTable(gf);
gf.setVisible(true);
... wo DBReader.outMatchesTable() ist definiert als
static public void outMatchesTable(DBGridForm gf) {
DBReader ddb = new DBReader();
ddb.readMatchesTable(null);
gf.showFromVectors(ddb.lastRsltColNames, ddb.lastRsltData);
}
Meine Vermutung ist, ich bin etwas Blick, entweder über den swing-Klassen, die ich verwende, oder über Java. Irgendwelche Ideen?
InformationsquelleAutor Graza | 2008-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
"diese" in Ihrem Kontext, ist unklar. Ist es in einem applet? ein JFrame?
Können Sie mit einem layout-Problem, stellen Sie sicher, dass Sie angerufen haben setLayout auf Ihre Klasse mit einer new borderlayout.
In einer swing-Anwendung, die Sie benutzen wollen würde getRootContentPane().add() statt einer raw-add(), abhängig von der version.
Java-tutorial über das hinzufügen von top-level-Inhalte: http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html
OK, calling".setLayout(new java.das awt.BorderLayout());" vor dem hinzufügen des scroll pane hat den trick. Ich denke, das Standard-layout Hinzugefügt von netbeans muss etwas anderes sein - das ist wirklich das erste mal, das ich verwendet habe, netbeans, alle bisherige Erfahrung war, die Dinge von Grund auf neu...
Standard-layout ist ein flowlayout, denke ich.
InformationsquelleAutor davenpcj
Wenn Sie nicht auf den event-thread, könnte es ein problem sein--ich habe gesehen, verursachen, dass die Sachen nicht angezeigt.
Wenn dieser code aufgerufen wird, in Reaktion auf eine AWT-event (Mausklick, Tastendruck, ...) dann ist das nicht das problem, aber wenn es noch der selbe thread, der begann, Ihre app, oder dieser code ausgeführt wird, deaktivieren Sie einen timer, könnte sehr gut sein.
InformationsquelleAutor Bill K