JList仅显示有限的行数

时间:2012-05-05 22:18:40

标签: java swing user-interface jlist

我的JList只显示有限数量的行,但我的listData-vector有超过70个项目。

我使用jpanel作为一个列表项并将其添加到矢量 - >之后 - > mylist.setListData(theVector);

visibleRowCount可以设置为100或8,不重要......

编辑:我在JScrollPane中有我的JList,因为我在布局设计器中拖了它

EDIT2:有些代码......

private void initSubjectList() {
    try {
        Vector listData = new Vector();
        Vector<Subject> subjects = Subject.loadFromDB();
        for (Subject actSubject : subjects) {
            ListPanel listPanel = new ListPanel();
            listPanel.setSubject(actSubject);
            JLabel textLabel = new JLabel();
            // ... Some properties of my label...
            listPanel.setLayout(new BorderLayout());
            listPanel.add(textLabel, BorderLayout.WEST);

            listData.add(listPanel);
        }

        this.list_subjects.setListData(listData);
        this.list_subjects.setSelectedIndex(0);
        this.list_subjects.updateUI();
        initGradeList(grades, 0);
    } catch (Exception ex) {
        _parent.showError(ErrorPanel.TYPE_OKAY, ErrorPanel.TEXT_SQLEXCEPTION);
    }

3 个答案:

答案 0 :(得分:3)

将您的JList放在JScrollPane中:

JList list = new JList();
// ...
JScrollPane scrollPane= new JScrollPane(list);

// add scrollpane instead of list to hierarchy.

以下是一个完整的工作示例:

import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class Test2 {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                initUI();
            }
        });
    }

    protected static void initUI() {
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Vector<String> data = new Vector<String>();
        for (int i = 1; i < 100; i++) {
            data.add("Entry " + i);
        }
        JList list = new JList(data);
        list.setVisibleRowCount(8);
        JScrollPane scrollPane = new JScrollPane(list);
        frame.add(scrollPane);
        frame.pack();
        frame.setVisible(true);
    }
}

答案 1 :(得分:1)

我想知道你是不是只是将myList添加到允许它调整大小的布局中,所以它太小了。或者你没有表现出什么意思? 例如,如果将它添加到BorderLayout的中心,那么它是否正常工作,至少如果你调整窗口大小?

答案 2 :(得分:0)

尝试增加JList的高度