JavaGUI中的JComboBox的处理

简介: JComboBox的事件处理 JComboBox的事件处理亦可分为两种,一种是取得用户选取的项目;另一种是用户在JComboBox上自行输入完毕后按下[Enter]键,     运作相对应的工作。对于第一种事件的处理,我们使用ItemListener.对于第二种事件的处理,我们使用ActionListener. 这个范例用户可以选取所要的字号,字号的变化会呈现在JLabel上,并

JComboBox的事件处理

JComboBox的事件处理亦可分为两种,一种是取得用户选取的项目;另一种是用户在JComboBox上自行输入完毕后按下[Enter],

    运作相对应的工作。对于第一种事件的处理,我们使用ItemListener.对于第二种事件的处理,我们使用ActionListener.

这个范例用户可以选取所要的字号,字号的变化会呈现在JLabel上,并可让用户自行输入字体的大小。当用户按下[Enter]键后 ,若用户输入的值不在选项上时,此输入值会增加至JComboBox中,并将输入字体的大小显示在JLabel上。

<pre class="code">import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JComboBox8 implements ItemListener,ActionListener{

   String[] fontsize={"12","14","16","18","20","22","24","26","28"};

   String defaultMessage="请选择或直接输入文字大小!";

   Font font=null;

   JComboBox combo=null;

   JLabel label=null;

  

   public JComboBox8(){

     JFrame f=new JFrame("JComboBox");

     Container contentPane=f.getContentPane();

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

     label=new JLabel("Swing",JLabel.CENTER);

     font=new Font("SansSerif",Font.PLAIN,12);

     label.setFont(font);

     

     combo=new JComboBox(fontsize);

     combo.setBorder(BorderFactory.createTitledBorder("请选择你要的文字大小:"));

     combo.setEditable(true);

     ComboBoxEditor editor=combo.getEditor();

     combo.configureEditor(editor,defaultMessage);

     combo.addItemListener(this);0

     combo.addActionListener(this);

     

     contentPane.add(label);

     contentPane.add(combo);

      f.pack();

      f.show();

      f.addWindowListener(new WindowAdapter(){

     public void windowClosing(WindowEvent e){

       System.exit(0);

     }

      });   

   }

   public static void main(String[] args){

     new JComboBox8();

   }

   public void actionPerformed(ActionEvent e){

      boolean isaddItem=true;

      int fontsize=0;

      String tmp=(String)combo.getSelectedItem();

      //判断用户所输入的项目是否有重复,若有重复则不增加到JComboBox中。

      try{

         fontsize=Integer.parseInt(tmp);

         for(int i=0;i< combo.getItemCount();i++){

            if (combo.getItemAt(i).equals(tmp)){

              isaddItem=false;

              break;

            }

         }

         if (isaddItem){

          combo.insertItemAt(tmp,0);//插入项目tmp0索引位置(第一列中).

         }

         font=new Font("SansSerif",Font.PLAIN,fontsize);

         label.setFont(font);         

      }catch(NumberFormatException ne){

         combo.getEditor().setItem("你输入的值不是整数值,请重新输入!");

      }

   }

   public void itemStateChanged(ItemEvent e){//ItemListener界面只有itemStateChanged()一个方法,在此实作它。

      if (e.getStateChange()==ItemEvent.SELECTED){//当用户的选择改变时,则在JLabel上会显示出Swing目前字形大小信息.

         int fontsize=0;

         try{

           fontsize=Integer.parseInt((String)e.getItem());

           label.setText("Swing 目前字形大小:"+fontsize);           

         }catch(NumberFormatException ne){//若所输入的值不是整数,则不作任何的操作.

         

         }

      }

   }

}

 

 

 

 

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;  

   

public class testFrame extends JFrame implements ItemListener

{  

 JComboBox comboBox;

   JPanel p=new JPanel(); 

 JButton c;

 JButton c2 ;

  public testFrame()

  {

 JButton c=new JButton("a") ;

 JButton c2=new JButton("b") ;

comboBox=new JComboBox();

 comboBox.addItem("1");

 comboBox.addItem("2");

 comboBox.addItem("3");

 comboBox.addItemListener(this);

 p.add( comboBox);

     this.getContentPane().add(p);  

  

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

    this.setSize(360, 260);  

    this.setVisible(true);  

 }  

  

 public void itemStateChanged(ItemEvent e)

 {

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

            {

              String s=(String)comboBox.getSelectedItem();

                 System.out.println(s);

             }

}  

 public static void main(String args[]) 

 {  

  new testFrame();  

 }  

  

}  

 

目录
相关文章
|
7月前
一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题
一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题
648 2
|
7月前
|
传感器 机器人 定位技术
Python 机器人学习手册:6~10
Python 机器人学习手册:6~10
235 0
|
存储 前端开发 Java
Java 开发技巧:减少魔法值的使用
代码中有魔法值会造成代码可读性低(与代码量成正比)。还会造成维护困难,改动一个数值便要大动干戈,牵一发而动全身。应当尽力消灭或减少魔法值,提高维护效率和代码可读性。
Java 开发技巧:减少魔法值的使用
|
7月前
|
缓存 Unix 编译器
Cmake 的构建结构:理解 Cmake 的构建过程和依赖管理
Cmake 的构建结构:理解 Cmake 的构建过程和依赖管理
148 0
|
6月前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送&quot;Hello, Server!&quot;后关闭。注意Android中需避免主线程进行网络操作。
109 4
|
7月前
|
分布式计算 算法 搜索推荐
阿里巴巴内部:全技术栈PPT分享(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇、算法篇、大数据、Java后端架构!除了大家熟悉的交易、支付场景外,支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心技术栈:覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 大数据:Spark、Hadoop
|
7月前
|
消息中间件 传感器 运维
软件体系结构 - 架构风格(7)事件驱动架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(7)事件驱动架构风格
357 0
|
7月前
|
算法
MATLAB | 插值算法 | 一维interpl插值法 | 附数据和出图代码 | 直接上手
MATLAB | 插值算法 | 一维interpl插值法 | 附数据和出图代码 | 直接上手
317 0
|
JavaScript
正则表达式同时验证手机和座机号码
正则表达式同时验证手机和座机号码
236 0
|
Java
Java中文件路径及其访问
Java中文件路径及其访问
151 0