JList是客户端还算比较常见的组件,偶尔也用得到,值得一学。
从API可以看出,JList的构造方法有四种
1、空的构造方法将创建一个空白的JList
2、以对象数组的构造方法创建JList(Object[] listData),可以看出参数是对象形式,可以放入实体对象。下面用字符串数组举例
public class t {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(600, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(200,100));
//以数组构造方法创建
String[] str = {"aa","bb","cc","dd","ee","ff","gg"};
final JList jList = new JList(str);
jList.addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent e) {
if(!jList.getValueIsAdjusting()){ //设置只有释放鼠标时才触发
System.out.println(jList.getSelectedValue());
}
}
});
scrollPane.setViewportView(jList);
panel.add(scrollPane);
f.getContentPane().add(panel);
f.setVisible(true);
}
}
3、以向量的方式创建JList,其实Vector和数组属于一个类型的,道理同上。
4、以ListModel方式创建JList,这个才是重点。数据模型顾名思义是负责显示数据的,也就是说JList的数据都是从这个模型里取的,数据模型在swing中是比较经典的用法,很多重要的组件都有对应的数据模型model。
数据模型分为两种,一种是继承AbstractListModel,一种是DefaultListModel
public class t {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(600, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(200,100));
//以数据模型构造方法创建
final JList jList = new JList(new MyListModel());
jList.addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent e) {
if(!jList.getValueIsAdjusting()){ //设置只有释放鼠标时才触发
System.out.println(jList.getSelectedValue());
}
}
});
scrollPane.setViewportView(jList);
panel.add(scrollPane);
f.getContentPane().add(panel);
f.setVisible(true);
}
}
//列表数据模型
class MyListModel extends AbstractListModel{
@Override
public Object getElementAt(int index) {
// TODO Auto-generated method stub
return index;
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return 100;
}
}
public class t {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(600, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(200,100));
final DefaultListModel d = new DefaultListModel();//只有默认的模型有添加/删除方法
d.addElement("aa");
d.addElement("bb");
final JList jList = new JList(new MyListModel());
jList.addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent e) {
if(!jList.getValueIsAdjusting()){ //设置只有释放鼠标时才触发
System.out.println(jList.getSelectedValue());
}
}
});
scrollPane.setViewportView(jList);
panel.add(scrollPane);
f.getContentPane().add(panel);
f.setVisible(true);
}
}