在jscrollpane中禁用水平滚动

phu*_*ehe 15 java swing jscrollpane horizontal-scrolling

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

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

Mat*_*och 22

您可以使用:

import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
Run Code Online (Sandbox Code Playgroud)

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

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


cam*_*ckr 7

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

您可以使用WrapLayout.

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

  • 我不喜欢使用第三方库的想法。我认为 Java 应该默认使用它。但是感谢分享,它已经满足了我的需求:) (2认同)

phu*_*ehe 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

改编自Sun的教程