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

Lay*_*yna 2 java swing jscrollpane

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

一个JScrollPane就可以了,用的BoxLayout(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)),并且在此面板上一个JPanel,一堆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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

mKo*_*bel 5

  1. 你必须比较Rectangle/返回JViewport(可见矩形JScrollPane),而不是JScrollPane

  2. selectedPanel.getBounds而不是(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());

  3. 仍未centerred,必须分配JVievportsselectedPanel使用2

  4. 与使用单一代码行相同的结果 JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds())

  5. 为了更好的帮助,发布一个SSCCE/ MCVE,简短,可运行,可编译