选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择。

选择框

选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾。当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称复选框。与选择框相关的接口是ItemListener,事件类是ItemEvent。
JCheckBox类常用的构造方法有以下3个:

  1. JCheckBox():用空标题构造选择框。
  2. JCheckBox(String s):用给定的标题s构造选择框。
  3. JCheckBox(String s, boolean b):用给定的标题s构造选择框,参数b设置选中与否的初始状态。

JCheckBox类的其他常用方法如下:

  1. getState():获取选择框的状态。
  2. setState(boolean b):设置选择框的状态
  3. getLabel():获取选择框的标题。
  4. setLabel(String s):设置选择框的标题。
  5. isSelected():获取选择框是否被选中的状态。
  6. itemStateChanged(ItemEvent e):处理选择框事件的接口方法。
  7. getItemSelectable():获取可选项,获取事件源。
  8. addItemListener(ItemListener l):为选择框设定监视器。
  9. removeItemListener(ItemListener l):移去选择框的监视器。

【例 11-11】声明一个面板子类,面板子类对象有3个选择框。

class Panel1 extends JPanel{
JCheckBox box1,box2,box3;
Panel1(){
box1 = new JCheckBox(“足球”);
box2 = new JCheckBox(“排球”);
box2 = new JCheckBox(“篮球”);
}
}

单选框

当在一个容器中放入多个选择框,且没有ButtonGroup对象将它们分组,则可以同时选中多个选择框。如果使用ButtonGroup对象将选择框分组,同一时刻组内的多个选择框只允许有一个被选中,称同一组内的选择框为单选框。单选框分组的方法是先创建ButtonGroup对象,然后将希望为同组的选择框添加到同一个ButtonGroup对象中。参见例6.2程序的面板子类Panel2的声明,组内有3个单选框。

单选按钮

单选按钮(JRadioButton)的功能与单选框相似。使用单选按钮的方法是将一些单选按钮用ButtonGroup对象分组,使同一组的单选按钮只允许有一个被选中。单选按钮与单选框的差异是显示的样式不同,单选按钮是一个圆形的按钮,单选框是一个小方框。
JRadioButton类的常用构造方法有以下几个:

  1. JRadioButton():用空标题构造单选按钮。
  2. JRadioButton(String s):用给定的标题s构造单选按钮。
  3. JRadioButton(String s,boolean b):用给定的标题s构造单选按钮,参数b设置选中与否的初始状态。

单选按钮使用时需要使用ButtonGroup将单选按钮分组,单选按钮的分组方法是先创建对象,然后将同组的单选按钮添加到同一个ButtonGroup对象中。参见例6.2程序的子类panel1的声明,组内有3个单选按钮。

选择项目事件处理

用户对选择框或单选按钮做出选择后,程序应对这个选择作出必要的响应,程序为此要处理选择项目事件。选择项目处理程序的基本内容有:

  1. 监视选择项目对象的类要实现接口ItemListener,
  2. 程序要声明和建立选择对象,
  3. 为选择对象注册监视器,
  4. 编写处理选择项目事件的接口方法itemStateChanged(ItemEvent e),在该方法内用getItemSelectable()方法获取事件源,并作相应处理。

【例 11-12】处理选择项目事件的小应用程序。一个由3个单选按钮组成的产品选择组,当选中某个产品时,文本区将显示该产品的信息。一个由3个选择框组成的购买产品数量选择框组,当选择了购买数量后,在另一个文本框显示每台价格。

 1 import java.applet.*;
2 import javax.swing.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 class Panel1 extends JPanel{
6 JRadioButton box1,box2,box3;
7 ButtonGroup g;
8 Panel1(){
9 setLayout(new GridLayout(1,3));
10 g = new ButtonGroup();
11 box1 = new JRadioButton(MyWindow.fName[0]+"计算机",false);
12 box2 = new JRadioButton(MyWindow.fName[1]+"计算机",false);
13 box3 = new JRadioButton(MyWindow.fName[2]+"计算机",false);
14 g.add(box1);g.add(box2);g.add(box3);
15 add(box1);add(box2);add(box3);
16 add(new JLabel("计算机3选1") );
17 }
18 }
19 class Panel2 extends JPanel{
20 JCheckBox box1,box2,box3;
21 ButtonGroup g;
22 Panel2(){
23 setLayout(new GridLayout(1,3));
24 g = new ButtonGroup();
25 box1 = new JCheckBox("购买1台 ");
26 box2 = new JCheckBox("购买2台 ");
27 box3 = new JCheckBox("购买3台 ");
28 g.add(box1);g.add(box2);g.add(box3);
29 add(box1);add(box2);add(box3);
30 add(new JLabel(" 选择1、2或3"));
31 }
32 }
33 class MyWindow extends JFrame implements ItemListener{
34 Panel1 panel1;
35 Panel2 panel2;
36 JLabel label1,label2;
37 JTextArea text1,text2;
38 static String fName[] = {"HP","IBM","DELL"};
39 static double priTbl[][]={{1.20,1.15,1.10},{1.70,1.65,1.60},{1.65,1.60,1.58}};
40 static int productin = -1;
41 MyWindow(String s){
42 super(s);
43 Container con = this.getContentPane();
44 con.setLayout(new GridLayout(3,2));
45 this.setLocation(100,100);
46 this.setSize(400,100);
47 panel1 = new Panel1();panel2 = new Panel2();
48 label1 = new JLabel("产品介绍",JLabel.CENTER);
49 label2 = new JLabel("产品价格",JLabel.CENTER);
50 text1 = new JTextArea();text2 = new JTextArea();
51 con.add(label1);con.add(label2);con.add(panel1);
52 con.add(panel2);con.add(text1);con.add(text2);
53 panel1.box1.addItemListener(this);
54 panel1.box2.addItemListener(this);
55 panel1.box3.addItemListener(this);
56 panel2.box1.addItemListener(this);
57 panel2.box2.addItemListener(this);
58 panel2.box3.addItemListener(this);
59 this.setVisible(true);this.pack();
60 }
61 public void itemStateChanged(ItemEvent e){ //选项状态已改变
62 if(e.getItemSelectable()==panel1.box1){ //获取可选项
63 production =0;
64 text1.setText(fName[0]+"公司生产");text2.setText("");
65 }
66 else if(e.getItemSelectable()==panel1.box2){
67 production =1;
68 text1.setText(fName[1]+"公司生产");text2.setText("");
69 }
70 else if(e.getItemSelectable()==panel1.box3){
71 production =2;
72 text1.setText(fName[2]+"公司生产");text2.setText("");
73 }
74 else{
75 if(production ==-1) return;
76 if(e.getItemSelectable()==panel2.box1){
77 text2.setText(""+priTbl[production][0]+"万元/台");
78 }
79 else if(e.getItemSelectable()==panel2.box2){
80 text2.setText(""+priTbl[production][1]+"万元/台");
81 }
82 else if(e.getItemSelectable()==panel2.box3){
83 text2.setText(""+priTbl[production][2]+"万元/台");
84 }
85 }
86 }
87 }
88 public class Example6_2 extends Applet{
89 MyWindow myWin = new MyWindow("选择项目处理示例程序");
90 }

系列文章:

http://www.cnblogs.com/Coda/p/4564462.html
 

Java知多少(87)选择框和单选按钮(转)的更多相关文章

  1. Java知多少(87)选择框和单选按钮

    选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...

  2. 十. 图形界面(GUI)设计8.选择框和单选按钮

    选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...

  3. Java知多少(88)列表和组合框

    列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...

  4. Java知多少(89)列表和组合框

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...

  5. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  6. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  7. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

  8. Java知多少(111)数据库之修改记录

    修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是:    update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...

  9. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

随机推荐

  1. MSF 离线攻击

    MSF 离线攻击 MSF连环攻击在internet上实现是不太现实的,网络中的安全设备(防火墙.入侵检测.入侵防护系统). 实验拓扑如下: 实验说明:安全实验中的包过滤防火墙在测试中使用的是linux ...

  2. hdu5001(概率dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5001 题意:一个人随即从一个点出发,到达邻接点的概率相同,求出走d步都不会到达1~n点的每一点i的概率 ...

  3. 如何解决This system is not registered with RHN.

    今天我必须写下这篇文章,由于在我刚刚接触到Linux下安装oracle时碰到了Linux中少xscreensaver.rpm包自己弄了非常久.最后还是被一个大哥帮我攻克了:仅仅能说非常的感谢你! 我试 ...

  4. 【网络协议】TCP交互数据流和数据流成块

    前言 建立在TCP协议上的应用层协议有非常多,如FTP.HTTP.Telnet等,这些协议依据数据传输的多少能够分为两类:交互数据类型和成块数据类型. 交互数据类型,如:Telnet,这类协议一般仅仅 ...

  5. mindmanager2012打开文件出现runtime error r6025 解决方式

    关于mindmanager 2012启动无法执行,提示c++错误 ---------------------------Microsoft Visual C++ Runtime Library---- ...

  6. 本地或者服务器同时启动2个或多个tomcat

    一,修改配置文件server.xml的端口 C:\apache-tomcat-5.5.23-1\conf\server.xml用记事本什么的打开修改3个地方   第一: <Server port ...

  7. Linux下OpenCV的环境搭建(转)

    OpenCV is the most popular and advanced code library for Computer Vision related applications today, ...

  8. 安装ecshop提示“安装数据失败”或者“创建管理员帐号”

    解决方法: 在install/includes/init.php文件的顶部,<?php 下增加: date_default_timezone_set ('Asia/Shanghai'); 即可 ...

  9. 一个带动画的页面底部的TabBar的实现

    有时有这样一个需求,页面底部有几个图标能够点击,假设一个screenWidth显示不下这些图标,则这一列图标最后一个是more,点击more,能够通过动画展示两列图标 这样来增加layout中: &l ...

  10. 从零开始学Xamarin.Forms(三) Android 制作启动画面

    原文:从零开始学Xamarin.Forms(三) Android 制作启动画面     Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1.将启动画面的图片命名为:s ...