Java JScrollPane无法正确滚动:scrollRectToVisible是否出现问题?
我在GUI的一部分上进行了以下基本设置: 玻璃窗 在它上面,是一个带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)) 在这个面板上,有一堆ob面板 我正在尝试滚动到已高亮显示的面板。。。这几乎奏效。 当前,如果面板在底部仅显示一半,则滚动窗格将滚动以使其完全可见。。伟大的 如果它在顶部有一半可见,则不会。。。我可以接受。 但是,如果底部的一个完全不可见的面板高亮显示,系统不会评论,但也不会滚动到那里Java JScrollPane无法正确滚动:scrollRectToVisible是否出现问题?,java,swing,jscrollpane,Java,Swing,Jscrollpane,我在GUI的一部分上进行了以下基本设置: 玻璃窗 在它上面,是一个带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)) 在这个面板上,有一堆ob面板 我正在尝试滚动到已高亮显示的面板。。。这几乎奏效。 当前,如果面板在底部仅显示一半,则滚动窗格将滚动以使其完全可见。。伟大的 如果它在顶部有一半可见,则不会。。。我可以接受。 但是,如果底部的一个完全不可见的面板高亮显示,系统不会评论,但也不会滚动到那里
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.getBounds
而不是(selectedPanel.getX()、selectedPanel.getY()、selectedPanel.getWidth()、selectedPanel.getHeight())代码>
JVievports
和selectedPanel
与2
JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds())的结果相同。
SSCCE
/MCVE
如果你不尽快得到帮助,考虑创建和发布一个你把代码浓缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题不相关的代码,但是仍然显示出你的问题。非常好的朋友。1+1)这是有道理的,是的。。谢谢2) 啊,好吧,这当然让它更容易阅读!!!1号似乎已经帮到了。。。在某些情况下,我仍然会有副作用,但我认为这些都是由我不得不将面板推入的系统造成的。哦,是的,我会很好,在将来可能的情况下,尽可能地在SSCCE/MCVE上工作:)@Layna 1,2.从SSCCE/MCVE总是可以捕捉到一切(几乎)Ok,所有进一步的问题都必须来自外部。。。我确实做了一个小程序来测试滚动代码,现在它可以工作了。。。再次提醒一下答案:3是正确的,但我们决定不总是居中,因为它会让事情变得过于紧张。4:如果我们不检查是否需要滚动,事情会跳得到处都是,让我们看得头晕目眩,所以没有一行解决方案,就像它本来应该是一样整洁:)