我试图把一个JList
一个JScrollPane
内,并将它按字母顺序列出垂直列中的条目是这样的:JList - 使用垂直滚动条而不是水平垂直折叠方向?
A D G
B E H
C F
然而,当JList
用完的空间来显示更多的条目,我像JScrollPane
滚动只有在垂直方向。
这个工程,当我用VERTICAL_WRAP
。但是,它似乎是当我使用垂直包装我得到一个水平滚动条,当我使用HORIZONTAL_WRAP
我得到我想要的滚动条,但项目被放置在一个我不喜欢的顺序。我可以吃我的蛋糕,也可以吃吗?这是我想要做的一个简单的例子。
这是最接近我能得到的,但我希望能够垂直滚动,同时保持垂直字母顺序。
public class ScrollListExample {
static List<String> stringList = new ArrayList<String>();
static {
for (int i = 0; i < 500; i++) {
stringList.add("test" + i);
}
}
public static void main(final String[] args) {
final JFrame frame = new JFrame();
final Container contentPane = frame.getContentPane();
final JList list = new JList(stringList.toArray());
list.setLayoutOrientation(JList.VERTICAL_WRAP);
list.setVisibleRowCount(0);
final JScrollPane scrollPane = new JScrollPane(list);
contentPane.add(scrollPane);
frame.setPreferredSize(new Dimension(800, 400));
frame.pack();
frame.setVisible(true);
}
}
一个解决方案我已经,虽然为: 如果单元格大小已知我可以创建一个组件侦听器,并监听resize事件。当事件被触发时,我可以计算所需的行数,以防止水平滚动。这看起来像一个黑客,我不知道它如何可以处理可变大小的文本组件。
有趣的问题+1 – mKorbel 2012-02-02 19:41:56
的原因,你正在使用的时候'越来越水平滚动条“VERTICAL_WRAP”是'VERICAL_WRAP =>表示单元垂直然后水平流动的“报纸样式”布局。“因此,如果单元格将垂直流动,并且由于尺寸的原因,输出将从底部缠绕,因此它将开始水平填充。因此一个水平滚动条。 – RanRag 2012-02-02 20:09:01
这是有道理的,但我大部分尝试调整内部组件的尝试都没有达到我预期的效果。我将如何强制显示垂直滚动条,而不是水平滚动条?是否有我需要调整大小的特定组件? – Lockyer 2012-02-02 20:23:46