import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class JComboBox5 implements ItemListener{
String[] fontsize ={"12","14","13"};
String defaultMessage ="please select";
Font font =null;
JComboBox combo =null;
JLabel label =null;

public JComboBox5(){
JFrame f =new JFrame("jcombobox");
Container contentPane =f.getContentPane();
contentPane.setLayout(new GridLayout(2,1));
label =new JLabel("swing",JLabel.CENTER);
label.setFont(font);

combo =new JComboBox(fontsize);
combo .setBorder(BorderFactory.createTitledBorder("please choose"));
combo.setEditable(true);
ComboBoxEditor editor =combo.getEditor();
combo.configureEditor(editor,defaultMessage);
combo.addItemListener(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 JComboBox5();
}


public void itemStateChanged(ItemEvent e){
if(e.getStateChange()==ItemEvent.SELECTED){
int fontsize =0;
try{
fontsize =Integer.parseInt((String)e.getItem());
label.setText("swing size:"+fontsize);
}catch(NumberFormatException ne){}
}
}

}
-------------
我碰到的问题是,当程序启动后,第一次选择“12”时,不会触发itemStateChanged,选择了“14”后再回过头来选择“12”就正常了。为什么会这样?

解决方案 »

  1.   

    这是因为你默认的显示的就是第一个选项,如果你加这一句试试看
    combo.setSelectedIndex(2);
    它会使第三个也就是13被默认选中,所以这个时候你再选13的时候,因为选项没有发生改变,所以也就不会调用itemStateChanged方法了.
    所以你一开始选12的时候就不会变化了.因为默认就是选中你的第一项的
      

  2.   

    谢谢lbfhappy,试了一下,是这样的。如果我想让每次选择都能够触发相应的处理,该怎么做呢。
      

  3.   

    事件选错了如果我想让每次选择都能够触发相应的处理,该怎么做呢。应该是itemChanged
      

  4.   

    up一把。
    to: theforever(碧海情天)
    不要随便说一句,以致于误导人家。
    有好的解决方法,不防说的详细点。
      

  5.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class JComboBox5 implements ItemListener,ActionListener{
    String[] fontsize ={"12","14","13"};
    String defaultMessage ="please select";
    Font font =null;
    JComboBox combo =null;
    JLabel label =null;public JComboBox5(){
    JFrame f =new JFrame("jcombobox");
    Container contentPane =f.getContentPane();
    contentPane.setLayout(new GridLayout(2,1));
    label =new JLabel("swing",JLabel.CENTER);
    label.setFont(font);combo =new JComboBox(fontsize);
    combo .setBorder(BorderFactory.createTitledBorder("please choose"));
    combo.setEditable(true);
    ComboBoxEditor editor =combo.getEditor();
    combo.configureEditor(editor,defaultMessage);
    //combo.addItemListener(this);
    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 JComboBox5();
    }
    public void itemStateChanged(ItemEvent e){
    if(e.getStateChange()==ItemEvent.SELECTED){
    int fontsize =0;
    try{
    fontsize =Integer.parseInt((String)e.getItem());
    label.setText("swing size:"+fontsize);
    }catch(NumberFormatException ne){}
    }
    }
    public void actionPerformed(ActionEvent event)
    {
    if(event.getSource()==combo)
    label.setText("swing size: "+combo.getSelectedItem());
    }
    }用ActionPerformed