0

我在 jlist 上获取垂直滚动条时遇到问题。

listInfo 是一个包含数据的向量。右侧面板是框架东侧的面板。

如果我只添加 JList,它就会出现。如果我添加滚动窗格,则不会发生任何事情。

        data = new JList(listInfor);
        data.setVisible(true);
        data.setVisibleRowCount(5);
        data.setPreferredSize(new Dimension(400,400));
        data.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        JScrollPane scroll = new JScrollPane(data);
        rightPanel.add(scroll);

出于某种原因,这不起作用。

4

3 回答 3

3

不要设置 的首选大小JList,这会阻止它根据其内容计算列表的大小,这意味着它永远不会超过您提供的首选大小,这意味着它永远不会显示任何滚动条.

相反,使用JList#setVisibleRowCount和的组合Jlist#setPrototypeCellValue来调整JList计算首选大小的方式。

如果你真的想要更多的控制,你应该看看实现的Scrollable接口JList,但即便如此,我还是要小心

于 2014-02-24T23:26:03.330 回答
0

测试了这个

public static void main(String[] args) {

            String[] ar = {"one", "two", "three"};
            JList data = new JList(ar);

            data.setVisible(true);
            data.setVisibleRowCount(5);
            data.setPreferredSize(new Dimension(400,400));
            data.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

            JScrollPane scroll = new JScrollPane(data);

            JFrame frame = new JFrame("StackOverflow Test");
            frame.add(scroll);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack(); 
            frame.setLocationRelativeTo(null);  // to center
            frame.setVisible(true);
        }

一切都好

在此处输入图像描述

于 2014-02-24T23:29:33.787 回答
0

你应该为你的rightPanel变量指定一个布局管理器,如果它没有的话。缺少布局管理器可能会给您带来意想不到的结果,因为您没有手动设置组件的边界。

此外,正如MadProgrammer 的回答所指出的,如果可能,您不应在组件上设置首选尺寸。还有其他方法可以确定吸引人的尺寸。例如,使用JList,使用setVisibleRowCount

为了让滚动只在需要时出现,您可以在JScrollPane构造函数上指定滚动条策略,或者使用它的set方法来执行此操作。例子:

jlist.setVisibleRowCount(5);
JScrollPane scroll = new JScrollPane(jlist);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

此外,请确保滚动窗格的容器尊重其首选大小,因为滚动窗格尊重列表的首选大小。

于 2014-02-24T23:31:15.230 回答