JList 类用于表示列表框,列表框在窗体上占据的大小固定,当列表内容较多时,需要列表框具有滚动显示的效果,可将列表框放到滚动面板中。
JList常用构造方法如下
- JList():构造一个空的只读模型的列表框。
- JList(ListModel dataModel):根据指定的非 null 模型对象构造一个显示元素的列表框。
- JList(Object[] listData):使用 listData 指定的元素构造―个列表框。
- JList(Vector<?> listData):使用 listData 指定的元素构造一个列表框。
上述的第一个构造方法没有参数,使用此方法创建列表框后可以使用 setListData() 方法对列表框的元素进行填充,也可以调用其他形式的构造方法在初始化时对列表框的元素进行填充。常用的元素类型有 3 种,分别是数组、Vector 对象和 ListModel 模型。
JList每行只有一列,每一列称为一个element。根据MVC架构,其内部的model维护着一个数组,存放了所有的成员元素。因此,对于JList内部元素的处理,都应调用其model的相关方法。
JList 子类及其常用方法如下:
-
DefaultListModel :数据模型,对内部成员的操作均已实现,只需要使用相应的方法即可。其方法如下:
- addElement:添加数据;
- insertElementAt:插入数据;
- removeElement:移除数据。
-
ListCellRender : 渲染器,控制列表的显示
- getListCellRendererComponent:获取显示的控件
示例
继承 MyFrame 类,在创建一个窗口中,通过 JList 类创建一个包含6个选项的列表框,且列表项交替显示背景色。具体实现代码如下:
package com.supermap.desktop.samplecode.swing.list;
import com.supermap.desktop.samplecode.MyFrame;
import javax.swing.*;
import java.awt.*;
public class MyList extends MyFrame {
private MyList() {
String[] strings = new String[]{
"0",
"1",
"西瓜",
"苹果",
"香蕉",
"足球",
};
JList<String> stringJList = new JList<>(strings);
stringJList.setCellRenderer(new SubstanceDefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel listCellRendererComponent = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (index == 0) {
listCellRendererComponent.setText("这是第0行");
} else if (index == 1) {
listCellRendererComponent.setText("这是第1行,这个值为" + value);
} else {
listCellRendererComponent.setText(((String) value));
}
listCellRendererComponent.setBackground(index % 2 == 0 ? Color.WHITE : Color.ORANGE); // 设置交替背景色
return listCellRendererComponent;
}
});
this.add(stringJList);
}
public static void main(String[] args) {
MyList myList = new MyList();
myList.setVisible(true);
}
}
示例代码运行结果如下: