动态将JTable添加到JScrollPane中

7

我有一个表格,当用户提示我这样做时,我想要填充它。问题在于,我无法预测表格最终会有多少行。在显示表格的面板构造函数中,我有:

    // add empty scrollPane to JPanel which will later hold table
              scrollPane = new JScrollPane(); 
    add(scrollPane);

该类包含一个方法,当我想要最终显示表格时将调用该方法。
    public void displayTable(String[] columnNames, String[][] dataValues)
{
    table = new JTable(dataValues, columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(300, 80)); 
    table.setFillsViewportHeight(true); 
    scrollPane.add(table);

    this.setVisible(true);
    scrollPane.repaint();

}

问题是,表格从未显示出来。我只能看到ScrollPane所在的轮廓,没有表格内部。为什么表格没有显示出来,我该如何修复它?


为了更快地获得帮助,请包含一个SSCCE - mre
我认为这篇文章简短明了。我的问题不清楚吗? - Matt
涉及Swing时有许多细微之处。您提供的信息越多,我们就越容易帮助您。否则,我们都在瞎猜,尽管有时我们会很幸运。 - mre
3个回答

20

您应将组件添加到JScrollPane的JViewport而不是JScrollPane本身:

scrollPane.getViewport ().add (table);

1
另外你可以使用JViewport.setView(Component),但它会做同样的事情。 - MadProgrammer
那个方法很有效。我所做的是scrollPane.add(table),这解决了问题。 - yuva
天啊...我已经试了一整天,想弄清楚为什么我的jTable没有显示出来。说真的,为什么不只是scrollPane.add(Component)呢?我的意思是,我还会添加组件到哪里呢?难道不应该默认为视口吗? - Rabbit Guy

5

不要将表格添加到JScrollPane中,而是创建一个JScrollPane的视口,然后将其视图设置为表格。使用以下代码:
scrollPane.setViewportView(table)


3
一般来说,即使您还没有值,也要同时创建JTableJScrollPane
对于动态表格,最好使用DefaultTableModel或您自己扩展的TableModel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接