-1

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


}

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

4

3 回答 3

1

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

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

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

于 2012-11-21T20:21:38.113 回答
1

使用JScrollPane来实现滚动条。

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

教程中的详细信息:使用 JScrollPane

于 2012-11-21T20:29:35.663 回答
1

setVisibleRowCount()更改 JList 的大小首选项,但实际大小由布局 JList 的 Layout Manager 确定。一些布局会注意首选尺寸,而另一些则不会。

文档说:

对于 VERTICAL 布局方向,这将设置或获取要显示的首选行数,而无需滚动。对于 HORIZONTAL_WRAP 或 VERTICAL_WRAP 布局方向,它定义了单元格的换行方式。

JavaDoc中的更多详细信息。

于 2012-11-21T20:27:24.377 回答