如何使用java区分表单中的三个组合框?
我使用MVC模型创建了一个包含三个JComboxes的表单。 我的控制器类是从ItemListener继承的 在我的表格里我有如何使用java区分表单中的三个组合框?,java,event-handling,jcombobox,Java,Event Handling,Jcombobox,我使用MVC模型创建了一个包含三个JComboxes的表单。 我的控制器类是从ItemListener继承的 在我的表格里我有 createCombobox(mypane , "year"); createCombobox(mypane , "month"); createCombobox(mypane , "day"); private void createComboBox( Container container,String datatype) { JCombo
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());
}
}
那么,我如何理解在运行时控制器内部更改了哪一项呢?要获取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();
在createCombobox例程中,添加如下内容
jcmb.setName(dataType);
然后在控制器内部,您可以通过名称识别每个控制器:
comboBox.getName();
只需将名称设置为需要名称的类之间共享的常量。您可以使用组件类中的
setName(String name)
方法
顺便说一句,Java不支持字符串作为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));
由于3个combobox的项(如天索引和月索引)之间有一些相似之处,所以我不能使用这种方法。Java7支持开关中的字符串。