Java Swing 用法总结 - JList

JList 是一个列表框

由于JList使用了泛型,所以此处用E来代替泛型所代替的类型

构造方法

JList(ListModel<E> dataModel)

接受一个外部的ListModel来代替自己的ListModel

一般来说,此ListModel的类型为DefaultListModel

JList(final E[] listData)

接受一个外部的数组,构造后显示该数组中的数据

修改数组可以动态的改变JList中的内容

JList(final Vector<? extends E> listData)

接受一个外部的Vector容器,构造后显示该容器中的数据

修改Vector可以动态的改变JList中的内容

JList()

默认的构造方法,自己创建一个空的ListModel,不显示任何内容

基础用法

E getSelectedValue()

获取选中的内容

setSelectionMode(int selectionMode)

设置选择模式,有单选,连选和多选三种选择

1
2
3
4
5
6
7
8
JList list = new JList();

// 单选
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// 连选
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
// 多选
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

点击选中事件

使用addMouseListener即可实现

1
2
3
4
5
6
7
8
9
10
11
12
13
JList list = new JList<E>();
list.addMouseListener(new MouseAdapter() {
private E lastObject = null;

@Override
public void mousePressed(MouseEvent e) {
E e = list.getSelectedValue();
if (e != lastObject) {
// 你的代码
lastObject = e;
}
}
});

动态添加内容

若在构造时使用的VectorDefaultListModel

则为其添加内容即可

若没有类似的东西,可以使用getModel()方法获取其ListModel,再转型为DefaultListModel,通过其addElement(E element)方法来添加内容

特殊用法

再点击取消选择

调用JListsetSelectionModel方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
setSelectionModel(new DefaultListSelectionModel() {
boolean gestureStarted = false;

@Override
public void setSelectionInterval(int index0,int index1) {
if(!gestureStarted){
if (isSelectedIndex(index0)) {
super.removeSelectionInterval(index0,index1);
} else {
super.addSelectionInterval(index0,index1);
}
}
gestureStarted = true;
}

@Override
public void setValueIsAdjusting(boolean isAdjusting) {
if (isAdjusting == false) {
gestureStarted = false;
}
}
});