对 JComboBox 使用 switch 语句
Using a switch statement for a JComboBox
我有一个 JComboBox 设置,如下所示:
private String[] boxChoices = {"option 1", "option 2"};
JcomboBox box = new JCombobox(boxChoices);
box.addItemListener()
{
public void itemStateChanged(ItemEvent event)
{
int selection = box.getSelectedIndex();
switch (selection)
{
case 0: JOptionPane.showMessageDialog(null, "you have selected option 1");
break;
case 1: JOptionPane.showMessageDialog(null, "you have selected option 2");
break;
default: break;
}
}
}
我的问题是,当我选择一个选项时,消息将显示两次而不是一次。例如,如果我选择选项 1,将出现以下内容:
you have selected option 1
you have selected option 1
发生这种情况的原因是什么?
我不确定,但这可能是因为您使用的是匿名侦听器。
实施 ItemListener
并添加它。
出现此行为是因为在 JComboBox
中选择了任何项目,项目侦听器被调用了 2 次。第一次调用取消选择先前选择的项目,第二次调用选择新项目。
您可以使用 if
子句来过滤它以反映您想要捕获的实际事件,即选择或取消选择:
if(event.getStateChange() == ItemEvent.SELECTED)
或
if(event.getStateChange() == ItemEvent.DESELECTED)
根据您对状态选择的偏好更改您要诱捕的状态。
除了@Blip的回答,你还可以使用actionListener。 JComboBox 的 actionEvent 仅在您更改选择时触发一次。
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int selection = box.getSelectedIndex();
switch (selection) {
case 0:
JOptionPane.showMessageDialog(null, "you have selected option 1");
break;
case 1:
JOptionPane.showMessageDialog(null, "you have selected option 2");
break;
default:
break;
}
}
});
我有一个 JComboBox 设置,如下所示:
private String[] boxChoices = {"option 1", "option 2"};
JcomboBox box = new JCombobox(boxChoices);
box.addItemListener()
{
public void itemStateChanged(ItemEvent event)
{
int selection = box.getSelectedIndex();
switch (selection)
{
case 0: JOptionPane.showMessageDialog(null, "you have selected option 1");
break;
case 1: JOptionPane.showMessageDialog(null, "you have selected option 2");
break;
default: break;
}
}
}
我的问题是,当我选择一个选项时,消息将显示两次而不是一次。例如,如果我选择选项 1,将出现以下内容:
you have selected option 1
you have selected option 1
发生这种情况的原因是什么?
我不确定,但这可能是因为您使用的是匿名侦听器。
实施 ItemListener
并添加它。
出现此行为是因为在 JComboBox
中选择了任何项目,项目侦听器被调用了 2 次。第一次调用取消选择先前选择的项目,第二次调用选择新项目。
您可以使用 if
子句来过滤它以反映您想要捕获的实际事件,即选择或取消选择:
if(event.getStateChange() == ItemEvent.SELECTED)
或
if(event.getStateChange() == ItemEvent.DESELECTED)
根据您对状态选择的偏好更改您要诱捕的状态。
除了@Blip的回答,你还可以使用actionListener。 JComboBox 的 actionEvent 仅在您更改选择时触发一次。
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
int selection = box.getSelectedIndex();
switch (selection) {
case 0:
JOptionPane.showMessageDialog(null, "you have selected option 1");
break;
case 1:
JOptionPane.showMessageDialog(null, "you have selected option 2");
break;
default:
break;
}
}
});