JScrollPane不能正确滚动:scrollRectToVisible起作用了吗?

时间:2014-08-15 12:53:50

标签: java swing jscrollpane

我在GUI的一部分上有以下基本设置:

JScrollPane 在它上面,一个带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)) 在这个小组中,一个群体ob小组。

我正在尝试滚动到已突出显示的面板......这几乎可以正常工作。 Currenly,如果Panel在底部部分只有一半可见,ScrollPane会滚动使其完全可见..很棒。 如果它在TOP部分半可见,它不会......我可以忍受。 但如果突出显示最底层的一个完全不可见的面板,系统不会发表评论,但也不会在那里滚动!

            if(selectedPanel!=null){
            Rectangle targetRectangle = new Rectangle(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());
            Rectangle r = scrollPane.getVisibleRect();
            if (!r.contains(targetRectangle)) {
                tablePanel.scrollRectToVisible(targetRectangle);
            }
        }

遗憾的是,我不能100%确定选择倒数第二个面板时的行为方式,而不可见,因为如果没有一些代码体操,我无法做到这一点;也许有人可以提供我现在可以提供的信息。

1 个答案:

答案 0 :(得分:5)

  1. 您必须比较来自/ return Rectangle的{​​{1}}(来自JViewport的可见矩形),而不是来自JScrollPane

  2. 使用JScrollPane代替selectedPanel.getBounds

  3. 仍然没有居中,必须将(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());JVievportsselectedPanel分开

  4. 与使用单一代码行2

  5. 的结果相同
  6. 更快地发布JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds()) / SSCCE,简短,可运行,可编辑