在jscrollpane中禁用水平滚动

时间:2009-11-13 08:15:40

标签: java swing jscrollpane horizontal-scrolling

我有JScrollPane FlowLayout我希望有一个固定的宽度。它应该只是垂直滚动,当我调整窗口大小时应该自动重新排列内容。我认为应该有一个类似setEnableHorizontalScroll(false)的方法但找不到它。

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

8 个答案:

答案 0 :(得分:22)

您可以使用:

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

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

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

答案 1 :(得分:7)

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

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's tutorial

答案 2 :(得分:6)

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

您可以使用WrapLayout

或者您可以创建自定义面板并实现Scrollable界面。在这种情况下,关键是覆盖getScrollableTracksViewportWidth()以返回true,因此视口宽度而不是面板的宽度用于布局目的。可以在ScrollableFlowPanel

中找到此方法的示例

答案 3 :(得分:1)

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

1。下载" SwingX 1.6.4全部 - 二进制" ,并将jar添加到项目的库here.

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添加元素

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

我也遇到过这个问题......我的解决方法是修改JScrollPane source code并传递一个额外的参数来禁用水平滚动。编辑非常简单:

第53行:

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

然后,在第177行:

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

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

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

希望有所帮助。

答案 6 :(得分:-2)

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

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

如果在页面上使用倍数,而某些需要使用水平栏,则可以随时修改定位以包含父元素。

答案 7 :(得分:-2)

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

即可