天天看点

JAVA组件大全复选框、选项按钮、列表方框、下拉式列表的使用与介绍 (1)

7-1:使用JCheckBox组件:

类层次结构图:

   java.lang.Object

     --java.awt.Component

      --java.awt.Container

        --javax.swing.JComponent

           --javax.swing.AbstractButton

             --javax.swing.JToggleButton

               --javax.swing.JCheckBox

    JCheckBox与JRadioButton为JToggleButton的子类,因此它们可以使用AbstractButton抽象类里面许多好用的方法,如addItemLi

stener()、setText()、isSelected()等等。

构造函数:

    JCheckBox():建立一个新的JChcekBox.

    JCheckBox(Icon icon):建立一个有图像但没有文字的JCheckBox.

    JCheckBox(Icon icon,boolean selected):建立一个有图像但没有文字的JCheckBox,且设置其初始状态(有无被选取)。   

    JCheckBox(String text):建立一个有文字的JCheckBox.

    JCheckBox(String text,boolean selected):建立一个有文字的JCheckBox,且设置其初始状态(有无被选取)。

    JCheckBox(String text,Icon icon):建立一个有文字且有图像的JCheckBox,初始状态为无被选取。

    JCheckBox(String text,Icon icon,boolean selected):建立一个有文字且有图像的JCheckBox,且设置其初始状态(有无被选取

                                                       )。

7-1-1:构造JCheckBox组件:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JCheckBox1{

   public static void main(String[] args){

      JFrame f=new JFrame("JCheckBox1");

      Container contentPane=f.getContentPane();

      contentPane.setLayout(new GridLayout(2,1));

      JPanel p1=new JPanel();

      p1.setLayout(new GridLayout(1,3));

      p1.setBorder(BorderFactory.createTitledBorder("你最喜欢哪一家快餐店呢?"));

      JCheckBox c1=new JCheckBox("麦当劳");

      JCheckBox c2=new JCheckBox("肯德基");

      JCheckBox c3=new JCheckBox("21世纪");

      p1.add(c1);

      p1.add(c2);

      p1.add(c3);

      JPanel p2=new JPanel();

      p2.setLayout(new GridLayout(2,1));

      p2.setBorder(BorderFactory.createTitledBorder("以下为JCheckBox的图形示范:"));

      JCheckBox c4=new JCheckBox("图形1",new ImageIcon(".//icons//x.jpg"));

      JCheckBox c5=new JCheckBox("图形2",new ImageIcon(".//icons//x.jpg"));

      p2.add(c4);

      p2.add(c5);

      contentPane.add(p1);

      contentPane.add(p2);

      f.pack();

      f.show();

        f.addWindowListener(new WindowAdapter(){

            public void windowClosing(WindowEvent e){

               System.exit(0);

            }

        });

   }

}

7-1-2:JCheckBox事件处理:

      你可以在上面的选项中勾选你喜欢吃的快餐店,在勾选的过程中,你可以发现它是可以复选的。但在图形选项中,我们并无法

清楚用户是否选择此项目,因为选或不选图形都一样。为解决这个问题,我们要使用到事件处理方法。当JCheckBox中的选项被选取

或取消时,它会触发ItemEvent的事件,ItemEvent这个类共提供了4种方法可以使用,分别是getItem()、getItemSelectable()、

getStateChange()、paramString()。getItem()与paramString()方法会返回一些这个JCheckBox的状态值。一般我们较少用到这两

个方法。

     getItemSelectable()相当于getSource()方法,一样都是返回触发事件的组件,用来判断是那个组件产生事件。在上一章中我

们曾经说过,getSource()方法是EventObject类所提供,而所有事件类都会继承这个类,因此所有的事件我们均能用getSource()

方法来判断到底是哪个组件触发了事件。

    最后getStateChange()方法会返回此组件到底有没有被选取。这个方法会返回一个整数值。而我们可以用ItemEvent所提供的类

变量;若被选取则返回SELECTED,若没有被选取则返回DESELECTED.

    下面这个范例我们即利用ItemListener来选取图形产生变化,ItemListener这个inteface只有定义一个方法,那就是

itemStateChange(ItemEvent e),因此我们只需实作这个方法.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JCheckBox2 implements ItemListener

{

     JFrame f = null;

     JCheckBox c4 = null;

     JCheckBox c5 = null;

     JCheckBox2(){

         f = new JFrame("JCheckBox");

         Container contentPane = f.getContentPane();

         contentPane.setLayout(new GridLayout(2,1));

         JPanel p1 = new JPanel();

         p1.setLayout(new GridLayout(1,3));

         p1.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一家速食店呢?"));

         JCheckBox c1 = new JCheckBox("麦当劳");

         JCheckBox c2 = new JCheckBox("肯德鸡");

         JCheckBox c3 = new JCheckBox("21世纪");

         p1.add(c1);

         p1.add(c2);

         p1.add(c3);

         JPanel p2 = new JPanel();

         p2.setLayout(new GridLayout(2,1));

         p2.setBorder(BorderFactory.createTitledBorder("您喜欢哪种程序语言,喜欢的请打勾:"));

         c4 = new JCheckBox("JAVA",new ImageIcon(".//icons//x.jpg"));

         c5 = new JCheckBox("C++",new ImageIcon(".//icons//x.jpg"));

         c4.addItemListener(this);

         c5.addItemListener(this);

         p2.add(c4);

         p2.add(c5);

         contentPane.add(p1);

         contentPane.add(p2);

         f.pack();

         f.show();

         f.addWindowListener(new WindowAdapter() {

             public void windowClosing(WindowEvent e) {

                     System.exit(0);

             }

         });

     }

     public void itemStateChanged(ItemEvent e)

     {

         if (e.getStateChange() == e.SELECTED)

         {

             if(e.getSource() == c4)

                 c4.setIcon(new ImageIcon(".//icons//r.jpg"));

             if(e.getSource() == c5)

                 c5.setIcon(new ImageIcon(".//icons//r.jpg"));

         }

         else

         {

             if(e.getSource() == c4)

                 c4.setIcon(new ImageIcon(".//icons//x.jpg"));

             if(e.getSource() == c5)

                 c5.setIcon(new ImageIcon(".//icons//x.jpg"));

         }

     }

     public static void main(String args[])

     {

         new JCheckBox2();

     }

}

7-2:JRadioButton的使用:

    java.lang.Object

     --java.awt.Component

       --java.awt.Container

        --javax.swing.JComponent

         --javax.swing.Abstractbutton

          --javax.swing.JToggleButton

             --javax.swing.JRadioButton

    JRadioButtonBN J JToggleButton的一个了类,因此它也可以使用AbstractButton抽象类里的方法。如同前面所述,JChexkBox

主要用在多重选择时机,而JRadioButton则是运用在单一选择时机。

   JRadioButton构造函数:

    JRadioButton():建立一个新的JRadioButton.

    JRadioButton(Icon icon):建立一个有图像但没有文字的JRadioButton.

    JRadioButton(Icon icon,boolean selected):建立一个有图像但没有文字的JRadioButton,且设置其初始状态(有无被选取).   

    JRadioButton(String text):建立一个有文字的JRadioButton.

    JRadioButton(String text,boolean selected):建立一个有文字的JRadioButton,且设置其初始状态(有无被选取)。

    JRadioButton(String text,Icon icon):建立一个有文字且有图像的JRadioButton,初始状态为无被选取。

    JRadioButton(String text,Icon icon,boolean selected):建立一个有文字且有图像的JRadioButton,且设置其初始状态(有无

                                                    被选取。

7-2-1:构造JRadioButton组件与事件处理:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JRadioButton1 implements ItemListener

{

     JFrame f = null;

     JRadioButton r4 = null;

     JRadioButton r5 = null;

     JRadioButton1(){

         f = new JFrame("JRadioButton");

         Container contentPane = f.getContentPane();

         contentPane.setLayout(new GridLayout(2,1));

         JPanel p1 = new JPanel();

         p1.setLayout(new GridLayout(1,3));

         p1.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一家速食店呢?"));

         JRadioButton r1 = new JRadioButton("麦当劳");

         JRadioButton r2 = new JRadioButton("肯德鸡");

         JRadioButton r3 = new JRadioButton("21世纪");

         p1.add(r1);

         p1.add(r2);

         p1.add(r3);

         JPanel p2 = new JPanel();

         p2.setLayout(new GridLayout(2,1));

         p2.setBorder(BorderFactory.createTitledBorder("您喜欢哪种程序语言? 喜欢的请打勾"));

         r4 = new JRadioButton("JAVA",new ImageIcon(".//icons//x.jpg"));

         r5 = new JRadioButton("C++",new ImageIcon(".//icons//x.jpg"));

         r4.addItemListener(this);

         r5.addItemListener(this);

         p2.add(r4);

         p2.add(r5);

         contentPane.add(p1);

         contentPane.add(p2);

         f.pack();

         f.show();

         f.addWindowListener(new WindowAdapter() {

             public void windowClosing(WindowEvent e) {

                     System.exit(0);

             }

         });

     }

     public void itemStateChanged(ItemEvent e)

     {

         if (e.getStateChange() == e.SELECTED)

         {

             if(e.getSource() == r4)

                 r4.setIcon(new ImageIcon(".//icons//r.jpg"));

             if(e.getSource() == r5)

                 r5.setIcon(new ImageIcon(".//icons//r.jpg"));

         }

         else

         {

             if(e.getSource() == r4)

                 r4.setIcon(new ImageIcon(".//icons//x.jpg"));

             if(e.getSource() == r5)

                 r5.setIcon(new ImageIcon(".//icons//x.jpg"));

         }

     }

     public static void main(String args[])

     {

         new JRadioButton1();

     }

}

    要将RadioButton改成单选,我们必须用到ButtonGroup这个类。这个类位于javax.swing这个package下面,ButtonGroup类的主

要功能是:同一时间内只会有一个组件的状态为"on",其他皆为"off",也就是同一时间只有一个组件会被选取。而ButtonGroup类可

被AbstractButton下面的子类所使用,最常被使用的就是JRadioButton、JradioButtonMenu、Item与JToggleButton这些组件。

下面是ButtonGroup的类层次结构图:

ButtonGroup的类层次结构图:

java.lang.Object

    --javax.swing.ButtonGroup

    我们更改上例,使RadioButton变成单选吧!

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JRadioButton2 implements ItemListener{

   JFrame f=null;

   JRadioButton r4=null;

   JRadioButton r5=null;

   JRadioButton2(){

     f=new JFrame("JRadioButton2");

     Container contentPane=f.getContentPane();

     contentPane.setLayout(new GridLayout(2,1));

     JPanel p1=new JPanel();

     p1.setLayout(new GridLayout(1,3));

     p1.setBorder(BorderFactory.createTitledBorder("你最喜欢哪一家快餐店呢?"));

     JRadioButton r1=new JRadioButton("麦当劳");

     JRadioButton r2=new JRadioButton("肯德基");

     JRadioButton r3=new JRadioButton("21世纪");

     p1.add(r1);

     p1.add(r2);

     p1.add(r3);

     ButtonGroup bgroup1=new ButtonGroup();

     bgroup1.add(r1);                          

     bgroup1.add(r2);                          

     bgroup1.add(r3);

     JPanel p2=new JPanel();

     p2.setLayout(new GridLayout(2,1));

     p2.setBorder(BorderFactory.createTitledBorder("你最喜欢哪种程序语言,喜欢的请打勾:"));                        

     r4=new JRadioButton("java",new ImageIcon(".//icons//x.jpg"));

     r5=new JRadioButton("c++",new ImageIcon(".//icons//x.jpg"));

     r4.addItemListener(this);

     r5.addItemListener(this);

     p2.add(r4);

     p2.add(r5);

     ButtonGroup bgroup2=new ButtonGroup();

     bgroup2.add(r4);

     bgroup2.add(r5);

     contentPane.add(p1);

     contentPane.add(p2);

     f.pack();

     f.show();

     f.addWindowListener(new WindowAdapter(){

         public void windowClosing(WindowEvent e){

         System.exit(0);

         }       

     });    

   }

   public void itemStateChanged(ItemEvent e){

     if (e.getStateChange()==e.SELECTED){

       if (e.getSource()==r4)

          r4.setIcon(new ImageIcon(".//icons//r.jpg"));

       if (e.getSource()==r5)

          r5.setIcon(new ImageIcon(".//icons//r.jpg"));

     }else{

       if (e.getSource()==r4)

          r4.setIcon(new ImageIcon(".//icons//x.jpg"));

       if (e.getSource()==r5)

          r5.setIcon(new ImageIcon(".//icons//x.jpg"));

     }

   }

   public static void main(String[] args){

     new JRadioButton2();

   }

}

7-3: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 [email protected] ");

         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
下一篇: 什么是IP核