JAVA组件大全复选框,选项按钮,复选方框,下拉式列表的使用介绍

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);
/*
   将3个RadioButton对象放进ButtonGroup中,表示此3个RadioButton同一时间只有一个RadioButton的状态可以为"on";
*/
     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 9@9 ");
         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);
             }
         });
     }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
做方便实用的SWING控件! 欢迎大家测试并提交BUG报告. 由于个人能力和时间上的局限,希望有兴趣一起开发SWING控件的朋友,请与我联系.让我们一起努力! 为了方便查看,需要讨论的朋友请到另外一个置顶贴子. [讨论]关于"开源SWING控件" -------------------------------------------------------------------- 2004/03/25 首次发布 2004/04/08 把以前的组件和新做的组件合并到一个OpenSwing.jar文件中, 并初步将该组件库命名为”OpenSwing” 2004/06/17 加入了一个打印模板和一些新做的组件。 2004/07/25 加入了一个类似QQ界面的JGroupPane,修正了一些以前的组件的BUG. 对几乎所有的组件全部加入了JavaBeans处理, 使OpenSwing支持可视开发. 2005/04/17 将JNumberField最大长度,小数位长度修正成符合数据库定义的规范,如:NUMBER(10,2) 2005/04/21 修改了JNumberField的参数方及不能输入负数的BUG,及数字验证方法 JDatePicker弹出时不能显示当前输入日期的BUG 加入了好多人在CJW论坛上贴子中想要的带关闭按钮的JCloseableTabbedPane可关闭的JTabbedPane的组件 2005/06/21 对JDatePicker加入了时分秒的输入 2006/01/20 修正了JPopupButton在XP风格下呈两个按钮样子的BUG 对JFontDialog进行了部分修改 2006/03/08 从JDatePicker提出来一个组件JCalendarPanel日期选择面板 并修改了JDatePicker的设计方 2006/03/23 加入了韩文支持, 感谢在韩国工作的网友Sang Jian,韩文支持 OpenSwing_ko_KR.properties文件由他提供 2006/04/04 对JFileTree加入了文件过滤器建构.并对显示进行了排序 -------------------------------------------------------------------- ■以下组件,均在j2sdk1.4.2_01+win2k环境下测试通过,继续欢迎大家测试并提交BUG报告. JCalendarPanel 日期选择面板, 从JDatePicker提出来的控件, 可以单独使用。 JCloseableTabbedPane 带关闭按钮/可设置菜单的JTabbedPane JDateField 日期输入框,输入正确格的日期 JDatePicker 继承自JComboBox的日期选择框,保证输入正确格的日期(yyyy-MM-dd) 履历: 2004/03/26 根据网友caiyj的建议引入了recoon写的关于JDateDocument的校验方法 2004/04/02 根据网友caiyj提交的BUG,修正了做为TableCellEditor时日期选择面板弹不出问题 JDirChooser 文件目录选择对话框 JFileTree 文件目录树 JFontDialog 字体对话框 JGroupPane 类似QQ界面的组群管理面板 JIpAddressField IP地址输入框,只能输入0~255数字的IP地址 JListChooser 列表选择对话框 JNumberField 数字输入框,可限制小数位数,数字最大长度,最大最小能输入的数字 JPopupButton 带下拉菜单的工具栏按钮 JStatusBar 模拟Windows的状态栏. JStringField 字符输入框,限制可输入的最大长度 JTreeComboBox 带有树形结构的下拉列表 com.sunking.swing.print.* 一个打印模板 -------------------------------------------------------------------- ■ OpenSwing的测试方法: 解压后是一个JBUILDER项目的目录结构,里面有一个test.bat文件和OpenSwing.jar(主库文件)/OpenSwingBeanInfo.jar(可视开发支持文件),直接执行test.bat进行测试。 ■ OpenSwing的发布: 只需要将OpenSwing.jar(主库文件)包含在CLASSPATH中即可。 OpenSwingBeanInfo.jar(可视开发支持文件)不需要发布, 仅提供可视化开发的支持 ■JBuilder上配置OpenSwing可视化开发组件 1.将OpenSwing.jar/ OpenSwingBeanInfo.jar文件复制到 %JBuilderX_HOME%\lib\ 目录下 2.打开JBuilderX 3.菜单Tools --> Configure Libraries…-->弹出Configure Libraries…对话框 ①New… --> Name中输入OpenSwing, Location中输入User Home -->OK ②选取对话框左边User Home下面出现的OpenSwing ③对话框右边Class和 Source页中分别做如下动作: Add…-->选择%JBuilder_HOME%\lib\OpenSwing.jar和OpenSwingBeanInfo.jar --> OK ④按OK关闭 Configure Libraries…对话框 4.菜单Tools--> Configure Palette… 弹出Palette Properties…对话框 ①Pages 页中按 Add… --> PageName中输入OpenSwing --> OK ②Add components页中 -->Select library…--> 选取User Home 下的OpenSwing类库-->OK ③Add components页中 -->在Component filtering块中选择 No filtering-->展开com.sunking.swing类包-->选择如下类: JGroupPanel,JStatusBar,JPopupButton,JDatePicker,JStringField,JNumberField,JFontDialog,JIpAddressField,JDateField (可按住Ctrl键复选)-->OK ④按OK关闭Palette Properties…对话框 5.配置成功标志: 随便打开一个JAVA文件,点下面的Design页,然后上面会出来一个设计工具条,诸如:Swing,Swing Containers…等,工具条的右上角有用来滚动工具栏的按钮,我们可以将其滚动到最末尾.如果看到有一个OpenSwing的页,并在它上面有几个可视组件的话,说明你已经配置成功了,开始你的OpenSwing可视开发之旅吧.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值