代码之家  ›  专栏  ›  技术社区  ›  phunehehe

禁用JScrollPane中的水平滚动

  •  14
  • phunehehe  · 技术社区  · 16 年前

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

    有什么简单的方法吗?

    8 回复  |  直到 8 年前
        1
  •  22
  •   Matthew Murdoch    9 年前

    你可以使用:

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

    …但这只会阻止显示水平滚动条。

    要使内容自动重新排列,将取决于内容是什么。一 JTextPane JEditorPane 将自动为您执行此操作(不需要上述代码)。

        2
  •  7
  •   phunehehe    16 年前

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

    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

        3
  •  6
  •   camickr    16 年前

    这不是JDK中现成的定制解决方案。

    你可以使用 WrapLayout .

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

        4
  •  1
  •   Abdelsalam Shahlol Rohit Martires    9 年前

    您可以使用org.jdesktop.swingx.jxpanel而不是javax.swing.jpanel作为JScrollPane的视图端口视图:

    1。 下载“swingx 1.6.4全二进制”,并将jar添加到项目的库中。 here.

    2。 将jxpanel设置为jscrollpane的viewportview,而不是jpanel:

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

    三。 添加以下两个语句:

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

    4。 然后您可以向jxpanel添加元素,就像向jpanel添加元素一样。

        5
  •  0
  •   erica may    8 年前

    试试这个,这个对我很好 jscrollpane1.sethorizontalscrollbar(空);

        6
  •  -2
  •   Kevin Parkerson    15 年前

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

    第53行:

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

    然后,在第177行:

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

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

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

    希望有帮助。

        7
  •  -2
  •   aBenChase    14 年前

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

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

    如果在一个页面上使用多个,并且某些页面需要水平条,则可以始终编辑目标以包含父元素。

        8
  •  -2
  •   whitesiroi    13 年前

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