我目前有一个JScrollpane
,它有一个按钮列表,它们从容器底部开始运行并导致垂直滚动条出现(这是预期的)。在计时器上以预定义的间隔,这些按钮将变为“选中”。如果选择的其中一个按钮不在屏幕上,我想让JScrollPane自动移动,这样所选按钮就会在屏幕上完全显示。
我在这里做了一些看法,显然scrollRectToVisible
方法是我应该使用的方法,但它对我没有任何作用。
我正在做以下事情:
我的ScrollPane
包含JPanel
,在YAxis中设置为BoxLayout
。我在这个面板上添加了一堆按钮。添加完所有按钮后,Timer
开始通过这些按钮递增并突出显示它们。在计时器中的每次递增后,我调用以下行:
elevatorScroller.scrollRectToVisible(elevatorLevels[position].getBounds());
我的目的是让JScrollPane
移动当前突出显示的按钮并继续这样做,但我没有任何动作。
elevatorScroller
是我的JScrollPane
,elevatorLevels
数组包含我的按钮。
知道可能造成这种情况的原因是什么?建议repaint
移动后,我是否需要致电JScrollPane
或其他任何内容?
答案 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时它也应该工作。