代码之家  ›  专栏  ›  技术社区  ›  Graza

动态添加的jtable不显示

  •  1
  • Graza  · 技术社区  · 16 年前

    这里是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。有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   davenpcj    16 年前

    在你的语境中,“这个”是不清楚的。它在小程序中吗?一个jFrm?

    您可能有布局问题,请确保您已经使用新的borderlayout调用了类中的setlayout。

    在Swing应用程序中,根据版本的不同,您希望使用getrootContentPane().a d d()而不是原始的a d d()。

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

        2
  •  0
  •   Bill K    16 年前

    如果您没有在事件线程上运行,这可能是一个问题——我已经看到了这会导致无法显示内容。

    如果调用此代码是为了响应awt事件(鼠标单击、按钮按下…),那么这不是问题所在,但是如果启动应用程序的线程仍然相同,或者此代码正在运行计时器,则很可能是。