JScrollPane没有在JList上工作

时间:2012-12-20 13:54:14

标签: java swing jscrollpane jlist

代码:

list1items = new DefaultListModel();
list1items.addElement("-");
list1 = new JList(list1items);
list1.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
list1.setBounds(0,0, 100,100);
JScrollPane list1scr = new JScrollPane(list1);
list1scr.setPreferredSize(new Dimension(20, 20));
list1.setVisibleRowCount(8);
getContentPane().add (list1scr);

没有滚动条。当项目太多,它们被隐藏时,我无法接触到它们。怎么解决这个问题?

2 个答案:

答案 0 :(得分:9)

getContentPane().add(list1scr);

答案 1 :(得分:4)

为了扩展Michael Ardan的答案,您将JList添加到面板而不是JScrollPane。必须将JScrollPane添加到面板中,并且必须将JList添加到ScrollPane才能使其工作。实际上没有必要使用setBoundssetPreferredSize - 摆脱它们。当您调用setVisibleRowCount方法时,JList会处理所有这些。这是您的ScrollPane工作的一个示例。如果仍有问题,请将您自己的代码插入此示例,直到它中断为止。然后告诉我们是什么打破了它。如果没有,请接受Michael的回答。

import java.awt.*;
import javax.swing.*;

public class Temp extends JPanel{
    public Temp(){

        DefaultListModel list1items = new DefaultListModel();
        list1items.addElement("-");
        for(int i = 0; i < 200; i++)
            list1items.addElement("Item " + i);
        JList list1 = new JList(list1items);
        list1.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
        JScrollPane list1scr = new JScrollPane(list1);
        list1.setVisibleRowCount(8);
        add (list1scr);
    }


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new Temp());
        frame.pack();
        frame.setVisible(true);
    }
}