将jscrollbar附加到另一个组件

时间:2012-05-30 20:53:59

标签: java swing jscrollpane jscrollbar

在我的应用程序中,我有两个摇摆组件在彼此的顶部,看起来像这张图片。问题是橙色组件需要一个垂直滚动条,但我希望组件的右边缘保持精确对齐(宽度可以随着用户使应用更宽或更窄而变化)。如果我使用像网格布局这样的东西,滚动条会占用空间,然后滚动条会与红色组件的右边缘对齐。

enter image description here

我想我可能需要使用滚动条组件并单独添加它并使用它来控制橙色组件。有没有办法将滚动条附加到另一个组件?我认为没有使用滚动窗格会很困难。 我也对任何有关如何处理此问题的建议持开放态度。

1 个答案:

答案 0 :(得分:2)

实施您建议的方法应该不会太难。将橙色组件包裹在JScrollPane中,但配置滚动窗格以隐藏两个滚动条。然后,将滚动窗格中垂直滚动条的滚动模型设置为独立滚动条中的滚动模型。即使隐藏了滚动窗格滚动条,如果模型已链接,它仍将滚动。有些代码,请参阅my answer in this question - 这是一个不同的应用程序,但原理类似。

或者,您可以使用带有可见垂直滚动条的JScrollPane,并在红色组件旁边添加间距组件以使其保持对齐。我想你可以使用带有两列的GridBagLayout。第一行包含红色组件和间隔符,第二行包含带有橙色组件的滚动窗格,该组件跨越两列。然后,您只需从JScrollPane获取滚动条组件的宽度,并将spacer的首选宽度设置为相同的值。这种策略的一个缺点是,如果滚动条宽度发生变化(例如,由于UI更改),可能很难保持间隔尺寸更新。