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