java - 动态地将 JTable 添加到 JScrollPane

标签 java swing user-interface jtable jscrollpane

类似这个问题:Dynamically adding JTable to JScrollPane

我试图在每次用户单击按钮时添加 JTable。首先,我的问题与那个问题相同;什么都不会显示,一旦我使用 getViewport,我就可以让它显示,但现在我看不到任何按钮。

我应该在每个 JTable 的上方和下方都有按钮。 (它们也在滚动 Pane 中。我猜测它们已被删除,因为 getViewport 将获取整个滚动 Pane (我可以看到)并将我的 JTable 放在上面)。

为什么需要getViewport()?例如,如果我只需将 JTable 更改为 JButton,我就可以轻松地执行我想要的操作。

此外,如果我将按钮移动到滚动 Pane 之外,然后单击添加另一个 JTable,看起来它什么也没做。我假设它只是不断地将另一个 JTable 放在前一个 JTable 上。

总结一下:如何使用 JScrollPane 中的按钮将 JTable 添加到同一个 JScrollPane?

感谢您的帮助。

编辑:用户单击按钮时发生的操作: 该按钮工作正常,每次点击都会添加,但不会出现表格。

public void actionPerformed(ActionEvent e)
    {
        JTableList.add(new JTable(getModel()));
        panelClass.this.panel.add(JTableList.get(JTableList.size()-1));
        panelClass.this.panel.add(new JButton("test"));

        panelClass.this.validate();
        panelClass.this.repaint();
    }

最佳答案

看起来 JTable 必须单独位于滚动 Pane 中。

因此,要解决该问题,不要将 JTable 添加到面板中,而是首先将其添加到新的 JScrollPane 中,然后将该滚动 Pane 添加到面板中。验证并重新绘制,它将起作用。

查看代码片段:

public void actionPerformed(ActionEvent e)
{
    JTableList.add(new JTable(getModel()));
    JScrollPane tableContainer = new JScrollPane(JTableList.get(JTableList.size()-1));
    panelClass.this.panel.add(tableContainer);
    panelClass.this.panel.add(new JButton("test"));

    panelClass.this.validate();
    panelClass.this.repaint();
}

唯一的问题是,如果鼠标悬停在任何表格上,表格列表将不会滚动。参见这里:Why JScrollPane does not react to mouse wheel events?来解决这个问题。

关于java - 动态地将 JTable 添加到 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30747687/

相关文章:

java - Apache Poi 单元数据重复

java - IntelliJ IDEA 社区版 SDK

java - WebLogic 的 JAAS 配置

java - Jpanel.add(Jpanel) 没有响应?

java - 处理与 JavaFx 与 Griffon 的比较

java - 文件传输中的数据丢失 - JAVA?

java - 来自 maven swing 项目的可执行 jar

java - 无法更改java应用程序的背景颜色

c# - 如何在 visual studio 中重新创建这样的列表?

java - 移动数组中的元素