1

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。有任何想法吗?

4

2 回答 2

1

您的上下文中的“这个”不清楚。是在applet里面吗?一个JFrame?

您可能遇到了布局问题,请确保您已使用新的边框布局在您的班级上调用了 setLayout。

在 Swing 应用程序中,您可能希望使用 getRootContentPane().add() 而不是原始的 add(),具体取决于版本。

Java tutorial on adding top-level content: http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

于 2008-09-23T15:34:17.023 回答
0

If you are not running on the event thread, it could be a problem--I've seen that cause stuff not to display.

If this code is called in response to an AWT event (mouse click, button press, ...) then that's not the problem, but if it's still the same thread that started your app, or this code is running off a timer, could very well be.

于 2008-09-23T20:12:31.740 回答