本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
列表框和JComboBox组合框明显不同,这不仅仅是体现在外观上。当激活JComboBox组合框时,会出现下拉列表;而JList总是在屏幕上占据固定行的空间,大小也不会改变。如果要得到列表框中被选中的项目,只需调用getSelectValues(),它可以产生一个字符串数组,里面是被选中的项目名称。
另外,JList组件也允许多重选择,要是按住ctrl键,连续在多个项目上单击,那么原先选中的项目仍旧保持选中的状态,也就是说可以选中任意多的项目,如果选中了某个项目,按住shift键关单击另一个项目,那么这两个项目之间的所有项目都将被选中,这和在windows下的操作选中操作类似。
public class List extends JFrame {
private String[] weekDays = {
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期天"
};
private DefaultListModel lItems = new DefaultListModel();
private JList lst = new JList(lItems);
private JTextArea t = new JTextArea(weekDays.length,10);
private JButton b = new JButton("Add Items");
private int count = 0;
private ActionListener bl = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(count < weekDays.length){
lItems.add(0, weekDays[count++]);
}
else{
b.setEnabled(false);
}
}
};
private ListSelectionListener ll = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
if(e.getValueIsAdjusting())
return ;
t.setText("");
for(Object item : lst.getSelectedValues())
t.append(item + "\n");
}
};
public List() {
// TODO Auto-generated constructor stub
setLayout(new FlowLayout());
setVisible(true);
setSize(300,200);
t.setEnabled(false);
Border brd = BorderFactory.createMatteBorder(1, 1, 2, 2, Color.BLACK);
lst.setBorder(brd);
t.setBorder(brd);
for(int i = 0; i < 4;i++){
lItems.addElement(weekDays[count++]);
}
add(t);
add(lst);
add(b);
lst.addListSelectionListener(ll);
b.addActionListener(bl);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new List();
}
}
执行结果如下:
其实在很多应用程序中都可以见到这种列表框,另外,当列表框的项目过多时,JList并没有提供滚动,当然了,可以将JList包装到JScrollPane,那么它将会实现滚动的效果。