Java学习——68、列表框JList
之前介绍的单选按钮,复选框一般用在数据项比较少的情况下。
如果可供选择的数据项较多,通常用列表框或组合框,本篇介绍列表框。
1、 JList列表框
列表框可以显示一组数据项,从中可选择一个或多个。
其类名JList,声明如下:
public class JList extends JComponent implements Scrollable, Accessible//列表框类
{
public JList(T items[]) //由对象数组提供数据项
public JList(ListModel listmodel) //指定列表框模型
public void setSelectedIndex(inti) //选中第i(≥0)项
public int getSelectedIndex()//返回首个选中项序号
public T getSelectedValue()//返回首个选中项对象
public void addListSelectionListener(ListSelectionListenerl)//注册列表框选择事件监听器
}
2、列表框模型
列表框里的数据项由列表框模型存储并管理,类名为ListModel,声明如下:
public class DefaultListModel extends AbstractListModel
{
public DefaultListModel()
public int getSize()//返回列表框的数据项数
public T getElementAt(inti) //返回序号为i的组件
public void setElementAt(T item, int i) //设置序号为i的组件为item
public int indexOf(Object item) //返回item首次出现位置
public void insertElementAt(T item, int i) //在i处插入item数据项
public void addElement(T item) //添加item数据项
public void removeElementAt(inti) //删除序号为i的数据项
public boolean removeElement(T item) //删除首次出现的item项
public void removeAllElements()//删除所有数据项
}
3、列表框选择事件
选中列表框中的数据项,将触发列表框选择事件ListSelectionEvent,其监听器接口名为:ListSelectionListener。
其中包含的方法只有一个:
public interface ListSelectionListener extends EventListener//列表框选择事件监听器接口
{
public abstract void valueChanged(ListSelectionEvent ev); //列表框选择事件处理方法
}
注册该事件监听器的方法是:
addListSelectionListener(ListSelectionListenerlistener);
4、简单例题
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class JlistLearn extendsJFrame implements ListSelectionListener{
JList list;
JTextArea text;
public JlistLearn() {
super("列表框学习");
this.setVisible(true);
this.setSize(300, 300);
this.setLocationRelativeTo(null);
Strings[]= {"北京市","重庆市","云南省","四川省","湖南省","广东省","福建省","香港"};//列表框中的数据项,以数组方式存储
DefaultListModel model=new DefaultListModel();//列表框模型
for(inti=0;i<s.length;i++) {
model.addElement(s[i]);//将数据项加入到列表框模型中
}
list=new JList(model);//以模型创建列表框
this.getContentPane().add(list);
list.addListSelectionListener(this);//注册事件监听器
text=new JTextArea();
this.getContentPane().add(text,"South");
}
public void valueChanged(ListSelectionEvent ev) {
text.setText("您选中的是:"+list.getSelectedValue().toString());
text.append("\n序号为:"+list.getSelectedIndex());
if(list.getSelectedValue().equals("云南省"))
text.append("\n云南省有昆明市、曲靖市、楚雄州\n请问您是哪里的呢?");
}
public static void main(String argsp[]) {
new JlistLearn();
}
}
其运行结果如下:
当选中其中一项时,会触发valueChanged事件,如本例中,选中北京市的运行结果如下:
如果选中云南省,根据valueChanged方法,会在文本区中增加两行文字,运行结果如下所示:
注:getSelectedIndex()方法得到的序号是从0开始的。所以在本例是,北京市的序号为0,云南省的序号为2。