我有一个带有FlowLayout
的JScrollPane
,我想要它具有固定的宽度。它应该只能垂直滚动,在我重新调整窗口大小时自动重新排列内容。我认为应该有一个像setEnableHorizontalScroll(false)
这样的方法,但我找不到。
有什么简单的方法可以做到这一点吗?
我有一个带有FlowLayout
的JScrollPane
,我想要它具有固定的宽度。它应该只能垂直滚动,在我重新调整窗口大小时自动重新排列内容。我认为应该有一个像setEnableHorizontalScroll(false)
这样的方法,但我找不到。
有什么简单的方法可以做到这一点吗?
你可以使用:
import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
...但这只是防止水平滚动条被显示出来。
要使内容自动重新排列取决于内容的类型。 JTextPane
或JEditorPane
将自动为您完成此操作(无需使用上述代码)。
最后我找到了方法,请看这个非常简短的例子,不需要高级技巧:
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);
}
}
Adapted from Sun's tutorial
在JDK中没有现成的自定义解决方案。
您可以使用WrapLayout。
或者您可以创建一个自定义面板并实现Scrollable接口。在这种情况下,关键是重写getScrollableTracksViewportWidth()方法以返回true,这样视口的宽度而不是面板的宽度用于布局目的。此方法的示例可以在ScrollableFlowPanel中找到。
JScrollPane scrollPane = new JScrollPane();
JXPanel panel = new JXPanel();
scrollPane.setViewportView(panel);
3. 添加以下两条语句:
panel.setScrollableTracksViewportHeight(false);
panel.setScrollableTracksViewportWidth(true);
4. 然后您可以像添加到JPanel一样向JXPanel添加元素
试试这个,我用这个很好用 jScrollPane1.setHorizontalScrollBar(null);
$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) {
然后,在第177行:
if (horizontalScrollingEnabled) {
isScrollableH = percentInViewH > 1;
} else {
isScrollableH = false;
}
这就是你需要改变的全部内容。将修改后的源代码进行压缩,并包含在您的页面中。当初始化jScrollPane时,您现在可以设置是否要横向滚动,如下:
$('.scroll-pane').jScrollPane("", false);
只需使用水平栏的CSS类将显示设置为“none”。在初始化jScrollPlane后,在其底部添加以下内容:
$('.jspHorizontalBar').css({ 'display': 'none' });
只需要在 jquery.jscrollpane.js 文件中删除 isScrollableH = percentInViewH > 1;
这一行代码。
JPanel
,它们不会自动重新排列。 滚动条只是消失了 :( - phuneheheJScrollPane.HOTRIZONTAL_SCROLLBAR_NEVER
是您需要传递给它的变量。Matthew的解决方案对我有用,谢谢。 - Pangolin