仅显示4条记录并向JList添加滚动条

时间:2012-11-21 20:15:37

标签: java swing jlist

我添加了一个JList,并使其一次只显示4条记录。如果有超过4条记录,则用户应该能够滚动并查看其他记录。但在我的情况下,我会看到我添加的所有8-10条记录。代码未显示前4个记录和滚动条。有人能告诉我我失踪的是什么吗?

import java.awt.BorderLayout;

public class FrameTest {

    private JPanel panel;
    private JFrame frame;
    private FrameTest ft;
    private JList list;

    public FrameTest() {
        initComponents();
        ft = this;
    }

    private void initComponents() {
        frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

        panel = new JPanel();
        panel.setBorder(new EmptyBorder(5, 5, 5, 5));
        panel.setLayout(new BorderLayout(0, 0));

        frame.getContentPane().add(panel);

        list = new JList();
        list.setVisibleRowCount(4);
        list.setModel(new AbstractListModel() {
            String[] values = new String[] {"adf", "gr", "rg", "g", "tg", "gt", "tg", "tg", "t", "gt", "gt"};
            public int getSize() {
                return values.length;
            }
            public Object getElementAt(int index) {
                return values[index];
            }
        });
        list.setSelectedIndex(1);
        panel.add(list, BorderLayout.SOUTH);

        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }


}

注意:上面是我的代码的简化版本。

3 个答案:

答案 0 :(得分:1)

尝试将JList添加到JScrollPane并将滚动窗格添加到您的框架中。

    panel.add(new JScrollPane(list), BorderLayout.SOUTH);

visibleRowCount使用getPreferredScrollableViewportSize来确定应在滚动窗格中显示的行数

答案 1 :(得分:1)

setVisibleRowCount()更改了JList的首选项,但实际大小取决于布局管理器正在布置JList。有些布局会考虑首选尺寸,有些则不会。

文档说:

  

对于VERTICAL布局方向,设置或获取首选   要显示的行数,无需滚动。为了   HORIZONTAL_WRAP或VERTICAL_WRAP布局方向,它定义了如何   细胞包裹。

JavaDoc

中的更多详细信息

答案 2 :(得分:1)

使用JScrollPane来实现滚动条。

    JScrollPane scrollPane = new JScrollPane(list);
    panel.add(scrollPane, BorderLayout.SOUTH);

本教程中的详细信息:Using JScrollPane