欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java开发笔记(一百三十)Swing的选择框

程序员文章站 2023-02-07 14:16:55
不管是AWT还是Swing,都把选择框分成两类:复选框和单选按钮,这两类控件无论是外观上还是功能上均有显著差异。例如,在外观方面,复选框是在方框内打勾,而单选按钮是在圆圈内画圆点;在功能方面,复选框允许多选,而同组的单选按钮只能选择其中一个。然而AWT的复选框和单选按钮统统采用Checkbox类型, ......

不管是awt还是swing,都把选择框分成两类:复选框和单选按钮,这两类控件无论是外观上还是功能上均有显著差异。例如,在外观方面,复选框是在方框内打勾,而单选按钮是在圆圈内画圆点;在功能方面,复选框允许多选,而同组的单选按钮只能选择其中一个。然而awt的复选框和单选按钮统统采用checkbox类型,区别之处在于是否加入了单选组checkboxgroup。这不可避免又带来困惑,同样是checkbox类型,代码该如何区分某个选择框到底是复选框还是单选按钮?显然awt的控件设计很不合理,非常容易引起混淆,为此swing干脆将它俩彻底分开,各自分配对应的控件类型,从此井水不犯河水,大家才能相安无事。
swing给复选框起的名字叫jcheckbox,该控件与awt的checkbox用法相似,但在细节上存在下列差异:
1、对于jcheckbox来说,setlabel方法已经废弃,改为使用统一的settext方法来设置文本。同时获取控件文本的getlabel方法也改成了gettext方法。
2、getstate方法被直接取消了,jcheckbox改为调用isselected方法判断当前复选框是否选中。同时设置选中状态的setstate方法也改成了setselected方法。
下面是利用jcheckbox点菜的代码例子:

		jpanel paneltop = new jpanel(); // 创建顶部面板
		jcheckbox ck1 = new jcheckbox("麻婆豆腐"); // 创建一个复选框
		jcheckbox ck3 = new jcheckbox("清蒸桂花鱼"); // 创建一个复选框
		jcheckbox ck2 = new jcheckbox("香辣小龙虾"); // 创建一个复选框
		paneltop.add(ck1); // 在顶部面板上添加复选框
		paneltop.add(ck2); // 在顶部面板上添加复选框
		paneltop.add(ck3); // 在顶部面板上添加复选框
		frame.add(paneltop, borderlayout.north); // 把顶部面板添加到窗口的北边(上方)
		jcheckbox[] boxarray = new jcheckbox[]{ck1, ck2, ck3}; // 构建复选框数组
		ck1.additemlistener(new itemlistener() { // 给复选框添加一个点击监听器
			public void itemstatechanged(itemevent e) { // 复选框的状态发生变化
				// getstatechange方法用于获取复选框的当前状态。1为勾选,0为取消勾选
				labelcenter.settext(string.format("您%s了%s",
						(e.getstatechange() == 1 ? "点" : "取消"), ck1.gettext()));
				labelbottom.settext("当前已点菜肴包括:" + getcheckeditem(boxarray));
			}
		});
		ck2.additemlistener(new itemlistener() { // 给复选框添加一个点击监听器
			public void itemstatechanged(itemevent e) { // 复选框的状态发生变化
				// getstatechange方法用于获取复选框的当前状态。1为勾选,0为取消勾选
				labelcenter.settext(string.format("您%s了%s",
						(e.getstatechange() == 1 ? "点" : "取消"), ck2.gettext()));
				labelbottom.settext("当前已点菜肴包括:" + getcheckeditem(boxarray));
			}
		});
		ck3.additemlistener(new itemlistener() { // 给复选框添加一个点击监听器
			public void itemstatechanged(itemevent e) { // 复选框的状态发生变化
				// getstatechange方法用于获取复选框的当前状态。1为勾选,0为取消勾选
				labelcenter.settext(string.format("您%s了%s",
						(e.getstatechange() == 1 ? "点" : "取消"), ck3.gettext()));
				labelbottom.settext("当前已点菜肴包括:" + getcheckeditem(boxarray));
			}
		});

 

以上代码出现的getcheckeditem方法用来获取已经选定的菜单,该方法的定义代码示例如下:

	// 获取已经选定的菜单
	private static string getcheckeditem(jcheckbox[] boxarray) {
		string itemdesc = "";
		for (jcheckbox box : boxarray) { // 遍历复选框数组
			if (box.isselected() == true) { // 复选框被选中了
				if (itemdesc.length() > 0) {
					itemdesc = itemdesc + "、";
				}
				itemdesc = itemdesc + box.gettext(); // 菜单添加选定的菜肴
			}
		}
		return itemdesc;
	}

 

运行上述的复选框测试代码,弹出窗口的初始界面如下图所示。

Java开发笔记(一百三十)Swing的选择框
从左往右依次勾选三个复选框,每次勾选后的界面效果分别如下列三张图片所示。

Java开发笔记(一百三十)Swing的选择框Java开发笔记(一百三十)Swing的选择框Java开发笔记(一百三十)Swing的选择框
至于单选按钮,swing给它分配了专门的控件类型名叫jradiobutton,该控件的自身方法类似于jcheckbox,一样引入了settext、gettext、isselected、setselected等新方法替换awt的旧方法。并且swing给jradiobutton找了个按钮小组搭档,名叫buttongroup,只要多次调用小组对象的add方法,就能将若干个单选按钮加到同一小组。下面是与buttongroup有关的调用代码:

		buttongroup group = new buttongroup(); // 创建一个按钮小组
		group.add(rb1); // 把单选按钮1加入到按钮小组
		group.add(rb2); // 把单选按钮2加入到按钮小组
		group.add(rb3); // 把单选按钮3加入到按钮小组

 

接着把jradiobutton与buttongroup整合在一起,打算实现简单的点餐功能,完整的调用代码如下所示:

		jpanel paneltop = new jpanel(); // 创建顶部面板
		// 创建单选按钮,并且默认未选中
		jradiobutton rb1 = new jradiobutton("鱼香肉丝饭", false);
		// 创建单选按钮,并且默认已选中
		jradiobutton rb2 = new jradiobutton("香菇滑鸡饭", true);
		// 创建单选按钮,并且默认未选中
		jradiobutton rb3 = new jradiobutton("黑椒牛排饭", false);
		paneltop.add(rb1); // 在顶部面板上添加单选按钮
		paneltop.add(rb2); // 在顶部面板上添加单选按钮
		paneltop.add(rb3); // 在顶部面板上添加单选按钮
		frame.add(paneltop, borderlayout.north); // 把顶部面板添加到窗口的北边(上方)
		buttongroup group = new buttongroup(); // 创建一个按钮小组
		group.add(rb1); // 把单选按钮1加入到按钮小组
		group.add(rb2); // 把单选按钮2加入到按钮小组
		group.add(rb3); // 把单选按钮3加入到按钮小组
		rb1.additemlistener(new itemlistener() { // 给单选按钮添加一个点击监听器
			public void itemstatechanged(itemevent e) { // 单选按钮被选中
				label.settext("您点了" + rb1.gettext()); // 在标签上显示当前选中的单选按钮文本
			}
		});
		rb2.additemlistener(new itemlistener() { // 给单选按钮添加一个点击监听器
			public void itemstatechanged(itemevent e) { // 单选按钮被选中
				label.settext("您点了" + rb2.gettext()); // 在标签上显示当前选中的单选按钮文本
			}
		});
		rb3.additemlistener(new itemlistener() { // 给单选按钮添加一个点击监听器
			public void itemstatechanged(itemevent e) { // 单选按钮被选中
				label.settext("您点了" + rb3.gettext()); // 在标签上显示当前选中的单选按钮文本
			}
		});

 

运行上面的单选按钮测试代码,弹出窗口的初始界面如下图所示。

Java开发笔记(一百三十)Swing的选择框

然后从左往右依次单击三个按钮,每次单击后的界面效果分别如下列三张图片所示。

 Java开发笔记(一百三十)Swing的选择框Java开发笔记(一百三十)Swing的选择框Java开发笔记(一百三十)Swing的选择框



更多java技术文章参见《java开发笔记(序)章节目录