JComboBox第一次选取时为什么没有响应itemStateChanged事件。

zhenting 2006-08-22 02:35:06
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”就正常了。为什么会这样?

...全文
375 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
imA 2006-11-21
  • 打赏
  • 举报
回复
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
Ji秋风 2006-11-20
  • 打赏
  • 举报
回复
up一把。
to: theforever(碧海情天)
不要随便说一句,以致于误导人家。
有好的解决方法,不防说的详细点。
zhenting 2006-08-23
  • 打赏
  • 举报
回复
谢谢lbfhappy,试了一下,是这样的。

如果我想让每次选择都能够触发相应的处理,该怎么做呢。
  • 打赏
  • 举报
回复
事件选错了

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

应该是itemChanged
zhmt 2006-08-22
  • 打赏
  • 举报
回复
jf
千里冰封820 2006-08-22
  • 打赏
  • 举报
回复
这是因为你默认的显示的就是第一个选项,如果你加这一句试试看
combo.setSelectedIndex(2);
它会使第三个也就是13被默认选中,所以这个时候你再选13的时候,因为选项没有发生改变,所以也就不会调用itemStateChanged方法了.
所以你一开始选12的时候就不会变化了.因为默认就是选中你的第一项的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧