Java 在jscrollpane中禁用水平滚动

Java 在jscrollpane中禁用水平滚动,java,swing,jscrollpane,horizontal-scrolling,Java,Swing,Jscrollpane,Horizontal Scrolling,我有一个JScrollPane,带有FlowLayout,我想要一个固定的宽度。它应该只是垂直滚动,当我调整窗口大小时,内容应该自动重新排列。我认为应该有一个类似于setEnableHorizontalScroll(false)的方法,但找不到它 有什么简单的方法可以做到这一点吗?您可以使用: import static javax.swing.ScrollPaneConstants.*; // ... JScrollPane.setHorizontalScrollBarPolicy(HORIZ

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

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

您可以使用:

import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
…但这只会阻止显示水平滚动条


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

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

您可以使用


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

中找到。最后,我发现,请看这个非常简短的例子,不需要高级技巧:

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);
    }
}

改编自

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

第53行:

$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) {
然后,在第177行:

if (horizontalScrollingEnabled) {
isScrollableH = percentInViewH > 1;
} else {
isScrollableH = false;
}
这就是你需要改变的一切。缩小修改后的源代码并将其包含在页面中。初始化jScrollPane时,现在可以设置是否希望它像这样水平滚动:

$('.scroll-pane').jScrollPane("", false);
希望能有所帮助。

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


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

只需删除
IsCrollableh=percentInViewH>1
在jquery.jscrollpane.js中,您可以使用org.jdesktop.swingx.JXPanel而不是javax.swing.JPanel作为jscrollpane的视口视图:

1.下载“Swingx1.6.4全二进制”,并将jar添加到项目的库中

2.将JXPanel设置为JScrollPane的视口视图,而不是JPanel:

JScrollPane scrollPane = new JScrollPane();  
JXPanel panel = new JXPanel();  
scrollPane.setViewportView(panel);
3.添加以下两条语句:

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

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

试试这一个,这对我来说很好
jScrollPane1.setHorizontalScrollBar(null)

内容是固定大小的
JPanel
s,并且不会自动重新排列。滚动条消失了:(
JScrollPane.HOTRIZONTAL\u scrollbar\u NEVER
是如果你想跳过导入就必须传递给它的变量。Matthew的解决方案适合我,谢谢。其他组件应该实现滚动,并让getScrollableTracksViewportWidth()实现返回false,如下所述。我不喜欢使用第三方库的想法。我认为Java在默认情况下应该有这样的库。但是感谢分享,它已经满足了我的需要:)OP询问Java中的Swing JScrollPane组件,不是jquery的jScrollPane插件。@Dathan LOL:D:D该用户被问到问题是关于Java Swing组件的。问题是关于Java Swing组件的。
panel.setScrollableTracksViewportHeight(false);  
panel.setScrollableTracksViewportWidth(true);