我使用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());
}
}
所以我怎么能理解哪一个是在运行期间改变了控制器内部?
在createCombobox例程中,添加如下内容
jcmb.setName(dataType);
然后在你的控制器中,你可以通过名字来识别它们:
comboBox.getName();
只需将这些名称设置为常量,以便在需要该名称的类之间共享。
您可以使用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));
要获取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();