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