我有一个用java编写的MVC应用程序,其中包含一个包含三个组合框的表单。 年/月/日,如果年份和月份的选择发生变化,我想更改天数。 在我的观察器中,我只是定义了组合框
createComboBoxes( mainContentPage, "combobox name");
在我的控制器中我有:
public class ComboBoxItemListener implements ItemListener
{
private int year=0;
private int month=0;
private int day=0;
public WeatherController c_wc;
@Override
public void itemStateChanged(ItemEvent event)
{
JComboBox comboBox = (JComboBox)event.getSource();
if (event.getStateChange() == ItemEvent.SELECTED)
{
//this area is my problem
if(comboBox.getName() == Helper.COMBOBOX_MONTH || comboBox.getName() == Helper.COMBOBOX_YEAR)
{
//definitely this line is not correct
c_wc.addDaysToComboBox(comboBox, year, month);
comboBox.setEnabled(true);
}
//rest is okay
switch(comboBox.getName())
{
case Helper.COMBOBOX_YEAR:
year = Integer.parseInt(comboBox.getSelectedItem().toString().trim());
break;
case Helper.COMBOBOX_MONTH:
KeyValue<String, Integer> selectedItem = (KeyValue<String,Integer>)event.getItem();
month = Integer.parseInt(selectedItem.getValue().toString());
break;
case Helper.COMBOBOX_DAY:
day = Integer.parseInt(comboBox.getSelectedItem().toString().trim());
break;
case Helper.COMBOBOX_AIRPORT:
break;
}
System.out.println(year + " " + month + " " + day);
}
}}
如何在触发其他事件后更改另一个组件?
答案 0 :(得分:3)
答案 1 :(得分:1)
您可以为日期组合框创建自己的组合框模型。根据年份和月份组合框的选定值,您可以将日期组合框模型设置为正确的状态,以显示适当的天数。扩展DefaultComboBoxModel
的最简单方法。
编辑:
创建自定义模型使您可以更轻松地在选项之间进行更改。一个月可以有28天,29天,30天或31天。自定义类可以有一个方法来设置显示的天数,并且不需要外部的任何额外工作。另一个选项是在事件处理程序中创建一组选项,并在每次更改时替换模型。自定义类对代码进行分区,以便事件处理程序只设置显示的天数,而不需要关心如何影响数据的基础模型。
答案 2 :(得分:0)
您可以将命名组合框命名为
之类的字段JComboBox monthCobmo;
JComboBox daysCobmo;
JComboBox yearCobmo;
所以在itemStateChanged()
写下面的代码:
if(comboBox == monthCombo || comboBox== yearCombo)
{
daysCombo.setName("Bla-bla-bla");
}
答案 3 :(得分:0)
你的组合框需要实现ItemListener
接口并将自己注册为适当组件的监听器。
答案 4 :(得分:0)
如果选择年份或月份,您可以使用为其构造函数传递的适当值来实例化数月或数天的新JComboBox(取决于事件),然后更新GUI以反映更改。当然,JComboBox必须实现ItemListener来检测事件并更新GUI中的相应元素。
答案 5 :(得分:0)
您可以将组合框存储在地图中。 有一个像
这样的全局变量Map<String,JComboBox> nameToComboBox = new HashMap<String,JComboBox>();
在createComboBoxes方法中,创建一个combox后:
nameToComboxBox.put(comboBoxName, nameToComboBox);
在监听器中,您可以更新组合框:
case Helper.COMBOBOX_YEAR:
year = Integer.parseInt(comboBox.getSelectedItem().toString().trim());
JComboBox dayComboBox = nameToComboxBox.get("dayComboxBox");
dayComboBox.setModel(new DefaultComboBoxModel(newDayItems));
break;