我在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);
}
}
不幸的是,我不能百分百确定当倒数第二个面板被选中但不可见时它的表现,因为如果没有一些代码体操,我将无法做到这一点。也许有人可以帮助我提供此时的信息。
最佳答案
您必须比较来自/返回Rectangle
的JViewport
(来自JScrollPane
的可见矩形),而不是来自JScrollPane
使用selectedPanel.getBounds
代替(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());
仍然不是居中的,必须将JVievports
和selectedPanel
与2
相除
与使用单个代码行JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds())
相同的结果
为了更好地提供帮助,请尽快发布简短,可运行,可编译的SSCCE
/ MCVE
关于java - JScrollPane无法正确滚动:scrollRectToVisible起作用了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25326749/