我使用MVC模型创建了一个包含三个JComboBox的表单。 我的控制器类继承自ItemListener
我的表格中有
createCombobox(mypane , "year");
createCombobox(mypane , "month");
createCombobox(mypane , "day");
private void createComboBox( Container container,String datatype)
{
JComboBox jcmb = new JComboBox();
jcmb.addItemListener(listener);
container.add(jcmb);
switch(datatype.toLowerCase())
{
case "year":
v_ctl.addYearsToCombobox(jcmb);
break;
case "month":
v_ctl.addMonthsToCombobox(jcmb);
break;
case "day":
v_ctl.addDaysToComboBox(jcmb);
break;
}
}
控制器内部我有一些东西
public class ComboBoxItemListener implements ItemListener
{
@Override
public void itemStateChanged(ItemEvent event) {
JComboBox comboBox = (JComboBox)event.getSource();
System.out.println(event.getSource().toString());
}
}
那么如何才能理解在控制器内运行期间哪一个被更改?
答案 0 :(得分:1)
在您的createCombobox例程中,添加类似
的内容jcmb.setName(dataType);
然后在您的控制器内,您可以按名称识别每一个:
comboBox.getName();
只需在需要名称的类之间创建名称常量。
答案 1 :(得分:1)
您可以使用Component类中的setName(String name)
方法。
顺便说一句。 Java不支持String作为case元素。而不是你应该使用ComboBoxModel来提供内容。
protected void createComboBox(String name, CoboBoxModel model, ItemListener itemListener)
{
JComboBox jcmb = new JComboBox(model);
jcmb.setName(name);
jcmb.addItemListener(listener);
return jcmb;
}
然后这种接缝更方便
container.add(createCombobox("day", model, listener));
答案 2 :(得分:0)
要获取JComboxBox的选定项目,您可以执行
String value = (String)comboBox.getSelectedItem();
好的,您可以为组合框设置名称:
switch(datatype.toLowerCase())
{
case "year":
jcmb.setName("year");
v_ctl.addYearsToCombobox(jcmb);
break;
case "month":
jcmb.setName("month");
v_ctl.addMonthsToCombobox(jcmb);
break;
case "day":
jcmb.setName("jcmb");
v_ctl.addDaysToComboBox(jcmb);
break;
}
在你的听众中:
String changedComboBoxName = comboBox.getName();