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的项目上单击两次,运行相对应的动作。
- 继承ListSelectionListener interface
在JList这个类中有addListSelectionListener这个方法,可以检测用户对list的选取有任何改变

model2=new DataModel(2); list2=new JList(model2); list2.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢")); list2.addMouseListener(this);
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