Java知多少(87)选择框和单选按钮
选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择。
选择框
选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾。当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称复选框。与选择框相关的接口是ItemListener,事件类是ItemEvent。
JCheckBox类常用的构造方法有以下3个:
- JCheckBox():用空标题构造选择框。
- JCheckBox(String s):用给定的标题s构造选择框。
- JCheckBox(String s, boolean b):用给定的标题s构造选择框,参数b设置选中与否的初始状态。
JCheckBox类的其他常用方法如下:
- getState():获取选择框的状态。
- setState(boolean b):设置选择框的状态
- getLabel():获取选择框的标题。
- setLabel(String s):设置选择框的标题。
- isSelected():获取选择框是否被选中的状态。
- itemStateChanged(ItemEvent e):处理选择框事件的接口方法。
- getItemSelectable():获取可选项,获取事件源。
- addItemListener(ItemListener l):为选择框设定监视器。
- 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类的常用构造方法有以下几个:
- JRadioButton():用空标题构造单选按钮。
- JRadioButton(String s):用给定的标题s构造单选按钮。
- JRadioButton(String s,boolean b):用给定的标题s构造单选按钮,参数b设置选中与否的初始状态。
单选按钮使用时需要使用ButtonGroup将单选按钮分组,单选按钮的分组方法是先创建对象,然后将同组的单选按钮添加到同一个ButtonGroup对象中。参见例6.2程序的子类panel1的声明,组内有3个单选按钮。
选择项目事件处理
用户对选择框或单选按钮做出选择后,程序应对这个选择作出必要的响应,程序为此要处理选择项目事件。选择项目处理程序的基本内容有:
- 监视选择项目对象的类要实现接口ItemListener,
- 程序要声明和建立选择对象,
- 为选择对象注册监视器,
- 编写处理选择项目事件的接口方法itemStateChanged(ItemEvent e),在该方法内用getItemSelectable()方法获取事件源,并作相应处理。
【例 11-12】处理选择项目事件的小应用程序。一个由3个单选按钮组成的产品选择组,当选中某个产品时,文本区将显示该产品的信息。一个由3个选择框组成的购买产品数量选择框组,当选择了购买数量后,在另一个文本框显示每台价格。
import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Panel1 extends JPanel{
JRadioButton box1,box2,box3;
ButtonGroup g;
Panel1(){
setLayout(new GridLayout(1,3));
g = new ButtonGroup();
box1 = new JRadioButton(MyWindow.fName[0]+"计算机",false);
box2 = new JRadioButton(MyWindow.fName[1]+"计算机",false);
box3 = new JRadioButton(MyWindow.fName[2]+"计算机",false);
g.add(box1);g.add(box2);g.add(box3);
add(box1);add(box2);add(box3);
add(new JLabel("计算机3选1") );
}
}
class Panel2 extends JPanel{
JCheckBox box1,box2,box3;
ButtonGroup g;
Panel2(){
setLayout(new GridLayout(1,3));
g = new ButtonGroup();
box1 = new JCheckBox("购买1台 ");
box2 = new JCheckBox("购买2台 ");
box3 = new JCheckBox("购买3台 ");
g.add(box1);g.add(box2);g.add(box3);
add(box1);add(box2);add(box3);
add(new JLabel(" 选择1、2或3"));
}
}
class MyWindow extends JFrame implements ItemListener{
Panel1 panel1;
Panel2 panel2;
JLabel label1,label2;
JTextArea text1,text2;
static String fName[] = {"HP","IBM","DELL"};
static double priTbl[][]={{1.20,1.15,1.10},{1.70,1.65,1.60},{1.65,1.60,1.58}};
static int productin = -1;
MyWindow(String s){
super(s);
Container con = this.getContentPane();
con.setLayout(new GridLayout(3,2));
this.setLocation(100,100);
this.setSize(400,100);
panel1 = new Panel1();panel2 = new Panel2();
label1 = new JLabel("产品介绍",JLabel.CENTER);
label2 = new JLabel("产品价格",JLabel.CENTER);
text1 = new JTextArea();text2 = new JTextArea();
con.add(label1);con.add(label2);con.add(panel1);
con.add(panel2);con.add(text1);con.add(text2);
panel1.box1.addItemListener(this);
panel1.box2.addItemListener(this);
panel1.box3.addItemListener(this);
panel2.box1.addItemListener(this);
panel2.box2.addItemListener(this);
panel2.box3.addItemListener(this);
this.setVisible(true);this.pack();
}
public void itemStateChanged(ItemEvent e){ //选项状态已改变
if(e.getItemSelectable()==panel1.box1){ //获取可选项
production =0;
text1.setText(fName[0]+"公司生产");text2.setText("");
}
else if(e.getItemSelectable()==panel1.box2){
production =1;
text1.setText(fName[1]+"公司生产");text2.setText("");
}
else if(e.getItemSelectable()==panel1.box3){
production =2;
text1.setText(fName[2]+"公司生产");text2.setText("");
}
else{
if(production ==-1) return;
if(e.getItemSelectable()==panel2.box1){
text2.setText(""+priTbl[production][0]+"万元/台");
}
else if(e.getItemSelectable()==panel2.box2){
text2.setText(""+priTbl[production][1]+"万元/台");
}
else if(e.getItemSelectable()==panel2.box3){
text2.setText(""+priTbl[production][2]+"万元/台");
}
}
}
}
public class Example6_2 extends Applet{
MyWindow myWin = new MyWindow("选择项目处理示例程序");
}
系列文章:
Java知多少(87)选择框和单选按钮的更多相关文章
- Java知多少(87)选择框和单选按钮(转)
选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...
- 十. 图形界面(GUI)设计8.选择框和单选按钮
选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...
- Java知多少(88)列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...
- Java知多少(89)列表和组合框
有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...
- Java知多少(完结篇)
Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...
- Java知多少(下)
Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- Java知多少(111)数据库之修改记录
修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是: update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...
- Java知多少(110)数据库之插入记录
插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...
随机推荐
- Python学习——Python进程
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing,只需要定 ...
- Python3学习策略
自学Python要点 [来自:http://www.cnblogs.com/shsxt/p/9138950.html] 1.找一本浅显易懂,例程比较好的教程,从头到尾看下去. 不要看很多本,专注于一本 ...
- android View的点击无效的原因
点击事件不生效,原来是因为我在里面的 ImageView中添加了 android:clickable="true". 解决办法:删掉ImageView中的android:click ...
- 2016年3月12日Android学习笔记
1. //此句不能忘,否则onFling左右滑动不起作用 mLlExamView.setLongClickable(true); mLlExamView.setOnTouchListener(new ...
- 使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
在使用uploadify插件上传图片时,遇到一个比较坑的错误:上传时提示“Cannot read property 'queueData' of undefined”. 遇到这个问题有点无语,因为这个 ...
- hdu 4339 Query(两种思路求解)
Query Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- Scala:Functions and Closures
object Functions { def main(args: Array[String]) { // 本地函数 def localFun(msg: String) = println(msg) ...
- java 线程池 使用实例
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 请远离include_once和require_once
尽量使用include, 而不是include_once, 理由是 include_once需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载. 诚然, 这个理由是对的, 不过, 我今天要说的 ...
- FPGA系列之一:Cyclone V中的时钟资源
之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...