Java 使用scrollRectToVisible()时,需要调用两次才能正确定位。如何修复?
我的案例是:在我的项目中有两个选项卡视图,在JScrollPane中有选项卡A视图显示列表和选项卡B显示图表。 功能是:单击选项卡A中的一个列表项,它将转到选项卡B并滚动到指向的图表X(可能是第一个,也可能是第二个…) 问题是:如果单击选项卡A中的一项,选项卡B视图将滚动到最后一个图表(在JScrollPane的底部)。然后转到选项卡A,单击另一项,选项卡B应滚动至第一个图表(在JScrollPane顶部)。 但是,JScrollPane仍然固定在底部。 但如果我转到选项卡A并再次单击相同的项目,选项卡B可以正确地滚动到第一个图表 代码如下: 受保护的void buildUI() { setLayout(新的BorderLayout()) } 我尝试了以下滚动代码,但没有一个工作正常: myChartPanel.scrollRectToVisible(focusChart.getBounds()) 或 myGraphViewPane.getVerticalScrollBar().setValue(focusChart.getLocation().x) 或 myGraphViewPane.getViewport().setViewPosition(新点(focusChart.getLocation().x,chartView.getLocation().y))Java 使用scrollRectToVisible()时,需要调用两次才能正确定位。如何修复?,java,swing,scroll,jpanel,jscrollpane,Java,Swing,Scroll,Jpanel,Jscrollpane,我的案例是:在我的项目中有两个选项卡视图,在JScrollPane中有选项卡A视图显示列表和选项卡B显示图表。 功能是:单击选项卡A中的一个列表项,它将转到选项卡B并滚动到指向的图表X(可能是第一个,也可能是第二个…) 问题是:如果单击选项卡A中的一项,选项卡B视图将滚动到最后一个图表(在JScrollPane的底部)。然后转到选项卡A,单击另一项,选项卡B应滚动至第一个图表(在JScrollPane顶部)。 但是,JScrollPane仍然固定在底部。 但如果我转到选项卡A并再次单击相同的项目
为什么只点击两次,就可以滚动到正确的位置?真奇怪 尝试包装myChartPanel.scrollRectToVisible(focusChart.getBounds())代码>调用
SwingUtilities.invokeLater()
为了更快地获得更好的帮助,发布一个。没有问题,也没有在JViewport中居中,不知道在您的情况下发生了什么(invokeLater是无用的,因为这个方法没有滚动),为了更好的帮助,更快地发布一个SSCE、简短、可运行、可编译的上午问题
myChartPanel = new JPanel( new GridBagLayout() );
// add different charts for different Item in Tab A
myChartPanel.add(..)
myGraphViewPane = new JScrollPane();
Border scrollPaneBorder = myGraphViewPane.getBorder();
myGraphViewPane.setBorder( null );
//Set single graph view visible by default
myGraphViewPane.setViewportView( myChartPanel );
add( myGraphViewPane, BorderLayout.CENTER );
setBorder( scrollPaneBorder );