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

简介: 选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择。 选择框 选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾。

 

选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(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
 
相关文章
|
13天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
|
12天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
4天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
5天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
5天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
5天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
6天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。
|
6天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
15 1
|
6天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
7 0
|
7天前
|
缓存 监控 Java
Java并发编程:线程池与任务调度
【4月更文挑战第16天】Java并发编程中,线程池和任务调度是核心概念,能提升系统性能和响应速度。线程池通过重用线程减少创建销毁开销,如`ThreadPoolExecutor`和`ScheduledThreadPoolExecutor`。任务调度允许立即或延迟执行任务,具有灵活性。最佳实践包括合理配置线程池大小、避免过度使用线程、及时关闭线程池和处理异常。掌握这些能有效管理并发任务,避免性能瓶颈。

热门文章

最新文章