动态添加的JTable不显示

时间:2020-03-06 14:36:19  来源:igfitidea点击:

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);
}

我的猜测是我正在忽略某些东西,无论是我正在使用的swing类还是Java。有任何想法吗?

解决方案

在上下文中,"此"尚不清楚。它在小程序内吗?一个JFrame?

我们可能遇到布局问题,请确保已使用新的borderlayout在类上调用了setLayout。

在swing应用程序中,我们需要使用getRootContentPane()。add()而不是原始的add(),具体取决于版本。

有关添加顶级内容的Java教程:http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

如果我们不在事件线程上运行,则可能是一个问题-我已经看到了导致无法显示内容的问题。

如果调用此代码是为了响应AWT事件(单击鼠标,按下按钮,...),那不是问题,但是如果仍然是启动应用程序的同一线程,或者此代码正在运行计时器,很好。