JList的使用

JList的使用:

类层次结构图:
java.lang.Object
     --java.awt.Component
      --java.awt.Container
       --javax.swing.JComponent
        --javax.swing.JList

JList与JCheckBox有点相似,都可以让你选择一到多个选项,较不同的是,JList的选项方式是整列选取。我们先来看看JList 所提供的构造函数,方便迅速建立JList对象,如下所示:

JList构造函数:
  • JList():建立一个新的JList组件。
  • JList(ListModel dataModel):利用ListModel建立一个新的JList组件.
  • JList(Object[] listData):利用Array对象建立一个新的JList组件。
  • JList(Vector listData):利用Vector对象建立一个新的JList组件。

7-3-1:建立一般的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),如我们在程序改为:

  • contentPane.add(new JScrollPane(list1));
  • contentPane.add(new JScrollPane(list2));

如此就有滚动的效果了,若我们要有多个选项呢?在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);
			}
		});
	}
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值