天天看點

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);//插入項目tmp到0索引位置(第一列中).

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

繼續閱讀