类似于这个问题:动态地将JTable添加到JScrollPane
我试图在每次用户单击按钮时添加一个JTable。首先,我的问题和那个问题是一样的;什么都不会显示,一旦我使用了getViewport,我可以让它显示,除了现在我看不到我的任何按钮。
我应该在每个JTable的上面和下面都有按钮。(它们也在滚动窗格中。我猜它们被删除了,因为getViewport将获得整个滚动窗格(我可以看到)并将我的JTable放在上面)。
为什么需要getViewport()?我可以很容易地做我想要的,如果我只是简单地改变一个JButton的JTable。
同样,如果我将按钮移动到滚动面板的外部,然后单击以添加另一个JTable,看起来它什么也不做。我假设它只是不断地把另一个JTable放在前一个上面。
所以总结一下:我如何在JScrollPane中使用按钮来添加JTables到同一个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本身必须在滚动窗格中。
所以要解决这个问题,不是将JTable添加到面板中,而是首先将其添加到新的JScrollPane中,然后将该滚动窗格添加到面板中。验证并重新绘制,它将工作。
参见代码片段:
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();
}
唯一的问题是,如果鼠标在任何表格上,表格列表将不会滚动。为什么JScrollPane不响应鼠标滚轮事件?