动态添加的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事件(单击鼠标,按下按钮,...),那不是问题,但是如果仍然是启动应用程序的同一线程,或者此代码正在运行计时器,很好。