我的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%确定它的行为,因为如果没有一些代码体操,我就无法做到这一点;也许有人可以帮助我在这一点上提供信息。
>
您必须比较来自/返回JViewport
的矩形
(来自JScrollPane
的可见矩形),而不是来自JScrollPane
使用selectedPanel. getB的
而不是(selectedPanel.getX(),selectedPanel.getY(),selectedPanel.getWidth(),selectedPanel.getHeight());
仍然没有居中,必须用2
划分JVievport
和selectedPanel
与使用单个代码行JComponentPlacedIntoJScrollPane. scrollRectToViable(selectedPanel.getB的())
的结果相同
为了更好的帮助,请尽快发布SSCCE
/MCVE
,简短、可运行、可编译