Swing编程之JList用法总结

2015-01-02 17:11:44|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, 界面设计|来源:唯设编程网

JList是一个列表组件,有点和JComboBox相似。其实不然,JComboBox的内容只能用一列显示出来,而JList的内容可以多列显示。本文介绍这个这个Swing组件的使用方法。

1. 构造

最简单的方法是使用一个数组(Array)或者Vector作为参数进行构造,如下所示:

String[] words= { "quick", "brown", "hungry", "wild"};
JList wordList = new JList(words);

这种方法用起来非常简单,特别适合于列表内容不变的场合,但是,如果JList的内容需要动态变化,个人建议使用DefaultListModel作为参数构造JList:

JList<String> snapList = new JList<String>(new DefaultListModel<String>());

这样,你只需要处理对应的数据模型(DefaultListModel)则可以实现其列表内容的增加和删除操作。

2. 元素增加/删除

如何构造参数使用的是DefaultListModel,则可以对其列表项进行动态增加/删除,如果使用的构造参数是数组或者Vector,则JList的内容是无法动态增加/删除的。也许你会认为:我用一个数组构造JList,那么我只要将数组中的元素增加或减少,那么JList的内容自然会增加或减少。这绝对是个错误的认识,对数组内容的修改不会影响到JList。

下面是清空列表项的实例代码:

DefaultListModel<String> listModel = (DefaultListModel<String>) snapList.getModel();
//清空		
listModel.removeAllElements();

下面是一段增加列表项的代码:

for (String item : items) {
	listModel.addElement(item);
}

3. 事件处理

与其他控件不同,他处理的不是Action事件,而是ListSelectionEvent事件,监听器为ListSelectionListener。在这个事件处理过程中,又将鼠标的操作分为2种状态:1.按下鼠标不松手,在各个元素间拖动;2.松开鼠标。也就是说,当你按下鼠标后,会触发一个事件,拖动到另一个控件,又触发一个事件,继续拖动则继续触发事件,最后松手,触发一个事件。那么,你如何区分这2种情况呢?ListSelectionEvent提供了一个方法getValueIsAdjusting(),如果该方法返回true,则代表情况1;反之代表情况2。下面的代码为JList增加了ListSelectionListener监听器:

//快照列表选择事件
snapList.addListSelectionListener(new ListSelectionListener() {			
	@Override
	public void valueChanged(ListSelectionEvent e) {
		String selValue = snapList.getSelectedValue();
		if(selValue != null){
			if(selValue.equals("最新"))
				SummaryPanel.this.delSnapBtn.setEnabled(false);
			else
				SummaryPanel.this.delSnapBtn.setEnabled(true);
			htmlPane.setText(generateHTML(selValue));
		}else{
			SummaryPanel.this.delSnapBtn.setEnabled(false);
		}
	}
});	
<12>
发表评论0条 】
网友评论(共?条评论)..
Swing编程之JList用法总结