java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JComponent --javax.swing.JList
JList与JCheckBox有点相似,都可以让你选择一到多个选项,较不同的是,JList的选项方式是整列选取。我们先来看看JList 所提供的构造函数,方便迅速建立JList对象,如下所示:
一般我们若不需要在JList中加入Icon图像,通常会用第3或第4个构造函数建立JList对象。而这两个最大的不同在于使用Array对 象建立JList组件就无法改变项目的数量。对于项目数量经常改变的环境来说,以Vector对象来建立JList组件当然比较适合。例如 一个卖手机的店家,可能动不动就会有新手机上市,此时若用Array对象就不是很适当了!
我们来看个范例看怎么构造一个简单的JList吧!
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Vector; public class JList1 { public static void main(String args[]) { JFrame f = new JFrame("JList"); Container contentPane = f.getContentPane(); contentPane.setLayout(new GridLayout(1, 2)); String[] s = { "美国", "日本", "大陆", "英国", "法国" }; Vector v = new Vector(); v.addElement("Nokia 8850"); v.addElement("Nokia 8250"); v.addElement("Motorola V8088"); v.addElement("Motorola V3688x"); v.addElement("Panasonic GD92"); v.addElement("其他"); JList list1 = new JList(s); list1.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢?")); JList list2 = new JList(v); list2.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一种手机?")); contentPane.add(new JScrollPane(list1)); contentPane.add(new JScrollPane(list2)); f.pack(); f.show(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
在这个范例中,当窗口变小时,JList并不会有滚动(ScrollBar)的效果,所以可能无法看到比较下面的选项。若我们要有滚动的 效果,必须将JList放入滚动面版中(JScrollPane),如我们在程序改为:
如此就有滚动的效果了,若我们要有多个选项呢?在JList中有3种选择模式(Selection Mode)可供我们使用,分别是单一选择、 连续区间选择、与多重选择。我们可以在ListSelectionModel这个interface中找到这3个常数值,如下: static int SINGLE_SELECTION:一次只能选择一个项目。
static int SINGLE_INTERVAL_SELECTION:按住[shift]键,可以对某一边续的项目作选取。 static int MULTIPLE_INTERVAL_SELECTION:没有任何限制。可作单一选择,连续区间选择,或对不连续的项目作多重选择(按 住[Ctrl]键)。多得选择是java对JList的默认值,因此在上例中你可以在JList中作这3种模式的选择方式。
设置选择模式可以利用JList所提供的setSelectionMode(int selectionMode)方法。例如,若我们将上例改成如下:
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Vector; public class JList2 { public static void main(String args[]) { JFrame f = new JFrame("JList"); Container contentPane = f.getContentPane(); contentPane.setLayout(new GridLayout(1, 3)); String[] s1 = { "美国", "日本", "大陆", "英国", "法国", "意大利", "澳洲", "韩国" }; String[] s2 = { "范志毅", "符兵", "周宁", "杨晨", "高锋", "南方", "其他" }; Vector v = new Vector(); v.addElement("Nokia 3310"); v.addElement("Nokia 8850"); v.addElement("Nokia 8250"); v.addElement("Motorola V8088"); v.addElement("Motorola V3688x"); v.addElement("Panasonic GD92"); v.addElement("Panasonic GD93"); v.addElement("NEC DB2100"); v.addElement("Alcatel OT500"); v.addElement("Philips Xenium 9@9 "); v.addElement("Ericsson T29sc"); v.addElement("其他"); JList list1 = new JList(s1); list1.setBorder(BorderFactory.createTitledBorder("您最喜欢到哪个国家玩呢?")); JList list2 = new JList(s2); list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list2.setBorder(BorderFactory.createTitledBorder("您最喜欢哪个运动员呢?")); JList list3 = new JList(v); list3.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); list3.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一种手机?")); contentPane.add(new JScrollPane(list1)); contentPane.add(new JScrollPane(list2)); contentPane.add(new JScrollPane(list3)); f.pack(); f.show(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }