【问题标题】:Dynamically adding JTables to JScrollPane将 JTable 动态添加到 JScrollPane
【发布时间】:2015-06-10 05:22:00
【问题描述】:

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

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

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

为什么需要getViewport()?例如,如果我简单地将 JTable 更改为 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();
    }

【问题讨论】:

  • 1.为了获得更好的帮助,请尽快发布 SSCCE/MCVE,简短,可运行,可编译,2. 重用模型,替换模型,而不是在运行时删除/添加新的 JTable
  • @mKorbel 我不想替换,但我想继续添加 JTables,(使用不同的模型)。在滚动窗格中,我只有两个按钮,单击其中任何一个都会添加一个带有适当模型的表格,以及另外两个按钮。在每个 JTable 之前或之后添加一个 JTable。这两个按钮只是以不同的方式获取一个表格模型
  • 见 JTable.setModel()
  • @mKorbel 我正在设置模型,问题是当我尝试添加 JTable 时,如果我 getViewport,则 JTable 将正常显示,但它覆盖了我所有的按钮
  • 1.为了获得更好的帮助,请尽快发布 SSCCE/MCVE,简短、可运行、可编译,

标签: java swing user-interface jtable jscrollpane


【解决方案1】:

似乎 JTable 必须自己在滚动窗格中。

所以要解决这个问题,不要将 JTable 添加到面板中,而是先将其添加到新的 JScrollPane 中,然后再将该滚动窗格添加到面板中。验证并重新绘制,它将起作用。

见代码sn-p:

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? 以解决此问题。

【讨论】:

  • 这不是答案;请编辑您的问题以包含一个complete example,以显示您修改后的方法。
  • @trashgod 这不是一个答案吗? “首先将它添加到一个新的 JScrollPane,然后将该滚动窗格添加到面板”这样做是可行的。编辑以显示该代码的 sn-p
  • JTable 需要单独位于滚动窗格中。您表示“它应该工作”,但没有complete example,没有人能说出几位记者的要求。 JTable 自己处理鼠标事件,抢先滚动直到焦点转移。由于您已将我同时投反对票的answer 建议validate() 纳入其中,因此我将遵照版主的决定删除哪个答案。
  • 我不明白,所有必要的代码都在那里,我说过按钮添加正确,因此唯一需要的更改将在该操作中。我以前有我的大部分代码,但由于它太长并且不需要说明问题而将其编辑掉。我似乎确实错过了一种方法,但是我已经在进行(重新)验证,更改为验证没有帮助,并且使用列表也仍然产生了与我在编辑中更新的代码中指出的相同的问题。但是,如this answer中所见,改变它,即。在将表格添加到超级滚动窗格之前将其添加到滚动窗格中
  • 错误的决定......,默认情况下你不需要那个,永远不需要有意添加JTable来替换另一个JTable,一切都是关于模型,JScrollPane(JViewport)不需要LayoutManager的通知器,
猜你喜欢
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多