如何强制 JScrollPane 仅垂直滚动?

发布于 2024-10-14 03:40:19 字数 291 浏览 2 评论 0原文

伙计们,我需要在 jscrollpanel 中放置一些按钮,但 JScrollPane 不会创建垂直滚动。我在 JScrollPane 中使用 JPanel,它使用简单的 FlowLayout 布局。如何使 JScrollPanel 仅在垂直方向滚动?

问题:

在此处输入图像描述

所需的解决方案: 在此处输入图像描述

Guys, I need to put some buttons in a jscrollpanel, but the JScrollPane won't create a scroll vertically. I'm using a JPanel inside the JScrollPane which is using the simple FlowLayout layout. How can I make the JScrollPanel to scroll only in the vertical??

Problem:

enter image description here

Desired Solution:
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

颜漓半夏 2024-10-21 03:40:19

事实上您使用 JScrollPane 改变了很多有关内部 <代码>FlowLayout。事实上,当 FlowLayout 尝试布局包含的 JButton 时,它会使用可用空间。就您而言,您的 JScrollPane 的“可滚动客户端”中的空间没有限制。因此,考虑到您的 FlowLayout 有无限的空间,它使用该空间来根据它显示项目。

因此,解决方案是更改可滚动客户端,以将其可视区域限制为与 JScrollPane 的 JViewport

但是,在这种情况下,您甚至不会有行返回,因为 FlowLayout 不能很好地处理这种情况。

如果我是你,我当然会选择其他布局。由于 GridLayout 不能很好地处理边框,我认为您可以使用的唯一合理的标准布局是 GridBagLayout ,尽管我担心您的动态内容限制可能需要您做更多的事情可定制。

The fact you use a JScrollPane changes quite a few things concerning the internal FlowLayout. indeed, when the FlowLayout tries to layout contained JButtons, it use for that the available space. In your case, you don't have limits to the space in the "scrollable client" of your JScrollPane. As a consequence, considering your FlowLayout has infinite space, it uses this space to display items according to it.

So the solution would be to change your scrollable client in order to limit its viewable area to the same than your JScrollPane's JViewport.

However, you would not even in this case have your line returns, as FlowLayout don't really well handle this case.

Were I to be you, I would of course choose an other layout. As GridLayout don't really well handles borders, i think the only reasonible standard layout you can use is GridBagLayout, althgough I fear your dynamic content constraints may require you something even more customizable.

JTextArea c = new JTextArea();
c.setLineWrap(true);
c.setWrapStyleWord(false);

这会将文本区域中的所有内容换行到下一行,而不创建水平滚动。

JTextArea c = new JTextArea();
c.setLineWrap(true);
c.setWrapStyleWord(false);

This will wrap anything in a text area to the next line without creating a Horizontal Scroll.

美胚控场 2024-10-21 03:40:19

使用我在此答案中发布的修改后的流布局: 如何让 JToolBars 换行到下一行(FlowLayout)而不隐藏它们下面的 JPanel?

它将换行到下一行,并且滚动条应该垂直滚动。

Use the modified Flow Layout that I posted in this answer: How can I let JToolBars wrap to the next line (FlowLayout) without them being hidden ty the JPanel below them?

It will wrap to the next line and your scrollbar should scroll vertically.

若言繁花未落 2024-10-21 03:40:19
scrollbar = new Scrollbar(Scrollbar.VERTICAL);
scrollbar = new Scrollbar(Scrollbar.VERTICAL);
呆° 2024-10-21 03:40:19

或者您可以使用 JList

有关详细信息,请参阅此站点:http://docs.oracle.com/ javase/tutorial/uiswing/components/list.html

示例类:ListDialog 当窗口大小调整或元素不移动时仅使用垂直滚动条不适合视图。

Or you could use a JList.

See this site for more info: http://docs.oracle.com/javase/tutorial/uiswing/components/list.html

the example class: ListDialog uses only a vertical scrollbar, when the window is resized or the elements don't fit the view.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文