java界面编程(9) ------ 列表框

本文是自己学习所做笔记,欢迎转载,但请注明出处: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,那么它将会实现滚动的效果。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。