获取JScrollPane基于当前项目移动?

时间:2014-03-21 05:16:52

标签: java swing jscrollpane

我目前有一个JScrollpane,它有一个按钮列表,它们从容器底部开始运行并导致垂直滚动条出现(这是预期的)。在计时器上以预定义的间隔,这些按钮将变为“选中”。如果选择的其中一个按钮不在屏幕上,我想让JScrollPane自动移动,这样所选按钮就会在屏幕上完全显示。

我在这里做了一些看法,显然scrollRectToVisible方法是我应该使用的方法,但它对我没有任何作用。

我正在做以下事情:

我的ScrollPane包含JPanel,在YAxis中设置为BoxLayout。我在这个面板上添加了一堆按钮。添加完所有按钮后,Timer开始通过这些按钮递增并突出显示它们。在计时器中的每次递增后,我调用以下行:

elevatorScroller.scrollRectToVisible(elevatorLevels[position].getBounds());

我的目的是让JScrollPane移动当前突出显示的按钮并继续这样做,但我没有任何动作。

elevatorScroller是我的JScrollPaneelevatorLevels数组包含我的按钮。

知道可能造成这种情况的原因是什么?建议repaint移动后,我是否需要致电JScrollPane或其他任何内容?

3 个答案:

答案 0 :(得分:0)

我正在正确阅读scrollRectToVisible方法的文档,其中指出:

  

将scrollRectToVisible()消息转发给JComponent的父级

此处的关键字是,直接调用scrollRectToVisible()方法JScrollPane我的scrollRectToVisible()没有发生任何事情,因为该项的父级是JFrame。通过将JPanel方法传递给我的JScrollPane,它将上面的内容传递给{{1}}的父级,现在它可以正常工作。

答案 1 :(得分:0)

  

“我目前有一个JScrollpane,它有一个按钮列表,它们从容器底部开始运行并导致垂直滚动条出现(这是预期的)。在计时器上预定义的时间间隔,这些按钮将变为”选择“。如果选择的其中一个按钮不在屏幕上,我希望JScrollPane自动移动,以便屏幕上完全显示所选按钮。”

您还可以使用JViewPort的{​​{1}}并使用JScrollPane的{​​{1}}。像这样的东西

setViewPosition(Point)

这是一个正在运行的例子

JViewPort

答案 2 :(得分:0)

结帐Scrolling a Form。它被设计为处理滚动作为用户在表单中从组件到组件的选项卡。但逻辑只是寻找焦点变化,因此当你有一个将焦点转移到另一个组件的Timer时它也应该工作。