Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java区分表单中的三个组合框?_Java_Event Handling_Jcombobox - Fatal编程技术网

如何使用java区分表单中的三个组合框?

如何使用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

我使用MVC模型创建了一个包含三个JComboxes的表单。 我的控制器类是从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());

    }

}

那么,我如何理解在运行时控制器内部更改了哪一项呢?

要获取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支持开关中的字符串。