我在GUI的一部分上有以下基本设置:
JScrollPane 在它上面,一个带有BoxLayout的JPanel(新的BoxLayout(tablePanel,BoxLayout.PAGE_AXIS)) 在这个小组中,一个群体ob小组。
我正在尝试滚动到已突出显示的面板......这几乎可以正常工作。 Currenly,如果Panel在底部部分只有一半可见,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);
}
}
遗憾的是,我不能100%确定选择倒数第二个面板时的行为方式,而不可见,因为如果没有一些代码体操,我无法做到这一点;也许有人可以提供我现在可以提供的信息。
答案 0 :(得分:5)
您必须比较来自/ return Rectangle
的{{1}}(来自JViewport
的可见矩形),而不是来自JScrollPane
使用JScrollPane
代替selectedPanel.getBounds
仍然没有居中,必须将(selectedPanel.getX(), selectedPanel.getY(), selectedPanel.getWidth(), selectedPanel.getHeight());
和JVievports
与selectedPanel
分开
与使用单一代码行2
更快地发布JComponentPlacedIntoJScrollPane.scrollRectToVisible(selectedPanel.getBounds())
/ SSCCE
,简短,可运行,可编辑