JList的使用(笔记整理)

构造简单的JList

利用ListModel构造JList

建立有图像的JList

JList的事件处理

JList的使用

  • JList与JCheckBox的使用比较类似可以选取一至多项,JList可以整列选取
  • 第三种构造函数无法改变项目的数量

   

--构造一个简单的JList

 

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class JList01 {
    
    public static void main(String[] args) {
        JFrame f=new JFrame();
        Container contentpane=f.getContentPane();
        f.setLayout(new GridLayout(1, 2));
        String[] s=new String[]{"日本","英国","法国","中国","美国"};
        Vector v=new Vector();
        v.addElement("nokia 8850");
        v.addElement("nokia 8250");
        v.addElement("notorola v8088");
        v.addElement("motorola v3688");
        v.addElement("panasonic GD92");
        v.addElement("其他");
        
        JList jList=new JList(s);
        jList.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢"));
        
        JList jList2=new JList(v);
        jList2.setBorder(BorderFactory.createTitledBorder("你最喜欢哪部手机呢"));
        contentpane.add(new JScrollPane(jList));
        contentpane.add(new JScrollPane(jList2));
        contentpane.add(jList2);
        f.pack();
        f.show();
        f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
            
        });
    }
}

 

在这个窗口中,当窗口变小时,list没有滚动的效果,标红的代码段可以展示这个效果

*选择模式(Selection Mode)

设置选择模式可以用JList所提供的setSelectionMode方法(int selectionMode)

 

--利用ListModel构造JList

在实际操作中可以继承AbstractListModel这个抽象类,

 1 public class JList03 {
 2 
 3     public JList03(){
 4         JFrame f=new JFrame("JList03");
 5         Container contentpane=f.getContentPane();
 6         
 7         ListModel mode=new DataModel();
 8         JList list=new JList(mode);
 9         list.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢"));
10         
11         contentpane.add(new JScrollPane(list));
12         f.pack();
13         f.show();
14         f.addWindowListener(new WindowAdapter() {
15 
16             @Override
17             public void windowClosing(WindowEvent e) {
18                 // TODO Auto-generated method stub
19                 System.exit(0);
20             }
21             
22         });
23     
24     }
25     public static void main(String[] args) {
26         new JList03();
27     }
28 }
29 class DataModel extends AbstractListModel{
30 
31     String[] s={"美国","日本","中国","英国","法国","意大利","澳洲","韩国"};
32     @Override
33     public Object getElementAt(int index) {
34         // TODO Auto-generated method stub
35         return (index+1)+"."+s[index++];
36     }
37     @Override
38     public int getSize(){
39         return s.length;
40     }
41 
42     
43 }

*事实上,Java还提供了DefaultListModel这个类,它继承了前一个类,并实现了所有的抽象方法。

--建立有图像的JList

要在JList上加入icon,我们就要先了解一下ListCellRenderer这个接口。
我们先要了解一下这个方法。
*要想在这个JList上加入icon图像重要的一点是把JList的每一个项目当成JLabel
代码过程略

--JList的事件处理

     JList的事件处理分为两种:一是取得用户选取的项目;二是在JList的项目上单击两次,运行相对应的动作。

  1. 继承ListSelectionListener interface

在JList这个类中有addListSelectionListener这个方法,可以检测用户对list的选取有任何改变

model2=new DataModel(2);
        list2=new JList(model2);
        list2.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢"));
        list2.addMouseListener(this);
View Code

 DefaultListModel ,它在jdk中是这样解释的:此类以松散方式实现 java.util.Vector API,它实现 1.1.x 版本的 java.util.Vector

没有 collection 类支持,并且在发生更改时通知 ListDataListener。目前,它委托给一个 Vector,在将来的版本中,它将是一个真正的 Collection 实现。

**方法解释locationToIndex

public int locationToIndex(Point location)
返回最接近列表的坐标系统中给定位置的单元索引。要确定单元是否实际包含指定的位置,需要将该点与单元的边界进行比较,边界由 getCellBounds 提供。如果模型为空,则此方法返回 -1

此方法是委托给列表的 ListUI 中同名方法的覆盖方法。如果列表没有 ListUI,则它返回 -1

 

参数:
location - 点的坐标
返回:
接近给定位置的单元索引或 -1

     2. MouseListener interface

posted @ 2016-06-06 16:03  bronfreeonekiss  阅读(13787)  评论(0编辑  收藏  举报