JavaGUI中的JComboBox的处理

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();  

 }  

  

}  

 

你可能感兴趣的:(JavaGUI中的JComboBox的处理)