18

我有一个我想要一个固定宽度的东西JScrollPaneFlowLayout它应该只垂直滚动,当我调整窗口大小时,内容应该自动重新排列。我认为应该有一种方法,setEnableHorizontalScroll(false)但找不到它。

有什么简单的方法可以做到这一点?

4

8 回答 8

26

您可以使用:

import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);

...但这只是阻止了水平滚动条的显示。

让内容自动重新排列将取决于内容是什么。A JTextPaneorJEditorPane将自动为您执行此操作(无需上述代码)。

于 2009-11-13T15:53:57.510 回答
8

最后我发现了如何,请看这个非常简短的例子,不需要高级技巧:

public class MyTest extends JFrame {

    public static void main(String[] args) {
        MyTest test = new MyTest();
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setSize(300, 200);
        test.setVisible(true);
    }

    public MyTest() {
        String[] data = {
            "Arlo", "Cosmo", "Elmo", "Hugo",
            "Jethro", "Laszlo", "Milo", "Nemo",
            "Otto", "Ringo", "Rocco", "Rollo"
        };
        JList list = new JList(data);
        list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        list.setVisibleRowCount(0);
        JScrollPane scroll = new JScrollPane(list);
        this.add(scroll);
    }
}

改编自Sun 的教程

于 2009-12-08T08:26:17.020 回答
7

这不是 JDK 中开箱即用的自定义解决方案。

您可以使用WrapLayout

或者您可以创建一个自定义面板并实现 Scrollable 界面。在这种情况下,关键是重写 getScrollableTracksViewportWidth() 以返回 true,因此视口宽度而不是面板的宽度用于布局目的。这种方法的一个例子可以在ScrollableFlowPanel中找到

于 2009-11-13T17:17:10.243 回答
1

您可以使用 org.jdesktop.swingx.JXPanel 而不是 javax.swing.JPanel 作为 JScrollPane 的 ViewportView:

1.下载“SwingX 1.6.4 All - Binary”,并在此处将 jar 添加到项目的库中。

2.将 JXPanel 设置为 JScrollPane 的 ViewportView 而不是 JPanel:

JScrollPane scrollPane = new JScrollPane();  
JXPanel panel = new JXPanel();  
scrollPane.setViewportView(panel);

3.添加以下两条语句:

panel.setScrollableTracksViewportHeight(false);  
panel.setScrollableTracksViewportWidth(true);

4.然后您可以像添加 JPanel 一样向 JXPanel 添加元素

于 2015-07-13T15:07:34.693 回答
0

试试这个,这对我很好 jScrollPane1.setHorizo​​ntalScrollBar(null);

于 2018-05-17T17:54:54.263 回答
-2

我也遇到了这个问题......我的解决方案是修改JScrollPane 源代码并传递一个附加参数来禁用水平滚动。编辑非常简单:

第 53 行:

$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) {

然后,在第 177 行:

if (horizontalScrollingEnabled) {
isScrollableH = percentInViewH > 1;
} else {
isScrollableH = false;
}

这就是你需要改变的一切。缩小修改后的源代码并将其包含在您的页面中。初始化 jScrollPane 时,您现在可以设置是否希望它水平滚动,如下所示:

$('.scroll-pane').jScrollPane("", false);

希望有帮助。

于 2010-11-29T22:14:18.890 回答
-2

只需使用水平条的 CSS 类将显示设置为“无”。在你的 jScrollPlane 底部(在你初始化它之后),添加:

$('.jspHorizontalBar').css({ 'display': 'none' });

如果在页面上使用倍数,并且有些需要水平条,您可以随时编辑定位以包含父元素。

于 2011-12-18T14:43:24.990 回答
-2

只需isScrollableH = percentInViewH > 1; 在 jquery.jscrollpane.js 中 删除

于 2012-11-30T09:34:03.203 回答