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

Java 仅显示4条记录,并向JList添加滚动条,java,swing,jlist,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; priva

我添加了一个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);
    }


}

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

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

    panel.add(new JScrollPane(list), BorderLayout.SOUTH);
getPreferredScrollableViewportSize
使用
visibleRowCount
来确定滚动窗格中应显示的行数

setVisibleRowCount()
更改JList的大小首选项,但实际大小由布局管理器布局JList决定。有些布局会注意到首选的尺寸,而其他布局则不会

文件说:

对于垂直布局方向,这将设置或获取首选方向 无需滚动即可显示的行数。对于 水平环绕或垂直环绕布局方向,它定义了如何 细胞被包裹起来


更多详细信息请参见。

使用
JScrollPane
实现滚动条

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

此处教程中的详细信息:

您没有阅读JList上的一些文档:
setVisibleRowCount()
应该有帮助。