我在GUI的一部分上进行了以下基本设置:

JScrollPane
在其上,带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS))
在此面板上,有一堆ob面板。

我正在尝试滚动到突出显示的面板...这几乎可以正常工作。
当前,如果面板在底部仅是半可见的,则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);
            }
        }


不幸的是,我不能百分百确定当倒数第二个面板被选中但不可见时它的表现,因为如果没有一些代码体操,我将无法做到这一点。也许有人可以帮助我提供此时的信息。

最佳答案

您必须比较来自/返回RectangleJViewport(来自JScrollPane的可见矩形),而不是来自JScrollPane
使用selectedPanel.getBounds代替(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());
仍然不是居中的,必须将JVievportsselectedPanel2相除
与使用单个代码行JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds())相同的结果
为了更好地提供帮助,请尽快发布简短,可运行,可编译的SSCCE / MCVE

关于java - JScrollPane无法正确滚动:scrollRectToVisible起作用了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25326749/

10-08 22:24