提问者:小点点

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


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

一个JScrollPane在它上面,一个带有BoxLayout(new BoxLayout(tablePanel, BoxLayout.PAGE_AXIS))的JPanel,在这个面板上,一个Bunch ob Panels。

我正在尝试滚动到已突出显示的面板…这几乎有效。目前,如果面板在底部仅半可见,则ScrollPane滚动以使其完全可见…太好了。如果它在顶部部分是半可见的,它不会…我可以接受。但是如果底部完全不可见的面板被突出显示,系统不会发表评论,但它也不会在那里滚动!

            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个答案

匿名用户

>

  • 您必须比较来自/返回JViewport矩形(来自JScrollPane的可见矩形),而不是来自JScrollPane

    使用selectedPanel. getB的而不是(selectedPanel.getX(),selectedPanel.getY(),selectedPanel.getWidth(),selectedPanel.getHeight());

    仍然没有居中,必须用2划分JVievportselectedPanel

    与使用单个代码行JComponentPlacedIntoJScrollPane. scrollRectToViable(selectedPanel.getB的())的结果相同

    为了更好的帮助,请尽快发布SSCCE/MCVE,简短、可运行、可编译