【问题标题】:Display only 4 records and add a scroll bar to JList仅显示 4 条记录并在 JList 中添加滚动条
【发布时间】:2012-11-21 20:15:36
【问题描述】:

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


}

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

【问题讨论】:

标签: java swing jlist


【解决方案1】:

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

文档说:

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

更多详情请关注JavaDoc

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      使用JScrollPane实现滚动条。

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

      教程详情见这里:Using JScrollPane

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多