我的情况是:我的项目中有2个选项卡 View ,Tab A View 显示列表,Tab B在JScrollPane中显示图表。 特点是:点击Tab A中的一个列表项,它将转到Tab B并滚动到指向的图表X(可能是第一个,也可能是第二个......)
问题是:如果单击选项卡 A 中的一项,选项卡 B View 将滚动到最后一个图表(位于 JScrollPane 的底部)。然后转到选项卡 A,单击另一个项目,选项卡 B 应该滚动到第一个图表(位于 JScrollPane 的顶部)。 不过,JScrollPane 仍然固定在底部。 但是,如果我转到选项卡 A 并单击同一个项目 agian,选项卡 B 可以正确滚动到第一个图表。
代码如下:
protected void buildUI() { setLayout( new BorderLayout() );
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 );
}
我尝试过以下滚动代码,但没有一个效果很好:
myChartPanel.scrollRectToVisible( focusChart.getBounds() );
或
myGraphViewPane.getVerticalScrollBar().setValue( focusChart.getLocation().x );
或
myGraphViewPane.getViewport().setViewPosition(new Point( focusChart.getLocation().x, chartView.getLocation().y ) );
为什么只点击两次,就能滚动到正确的位置?太奇怪了!
最佳答案
尝试将 myChartPanel.scrollRectToVisible( focusChart.getBounds() );
调用包装在 SwingUtilities.invokeLater()
关于java - 当使用scrollRectToVisible()时,需要调用两次才能正确固定位置。怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836109/