如何禁用秋千组合框中的项目? 我将这些项目添加为代码,因为在我的项目中我们无法从设计中手动添加它们。我想禁用项目,例如,如果从“摇摆月份”组合框中选择了“四月”,则由于“四月”有30天而不是31天,因此也应禁用警告消息项31。
public void months()
{
cmbDay.addItem("1");
cmbDay.addItem("2");
cmbDay.addItem("3");
cmbDay.addItem("4");
cmbDay.addItem("5");
cmbDay.addItem("6");
cmbDay.addItem("7");
cmbDay.addItem("8");
cmbDay.addItem("9");
cmbDay.addItem("10");
cmbDay.addItem("11");
cmbDay.addItem("12");
cmbDay.addItem("13");
cmbDay.addItem("14");
cmbDay.addItem("15");
cmbDay.addItem("16");
cmbDay.addItem("17");
cmbDay.addItem("18");
cmbDay.addItem("19");
cmbDay.addItem("20");
cmbDay.addItem("21");
cmbDay.addItem("22");
cmbDay.addItem("23");
cmbDay.addItem("24");
cmbDay.addItem("25");
cmbDay.addItem("26");
cmbDay.addItem("27");
cmbDay.addItem("28");
cmbDay.addItem("29");
cmbDay.addItem("30");
cmbDay.addItem("31");
String getMonths = String.valueOf(cmbMonth.getSelectedItem());
if (cmbMonth.getSelectedItem().equals("April"))
{
}
else if (cmbMonth.getSelectedItem().equals("June"))
{
}
else if (cmbMonth.getSelectedItem().equals("September"))
{
}
else if (cmbMonth.getSelectedItem().equals("November"))
{
}
}
答案 0 :(得分:0)
要回答您提出的问题,在JComboBox的下拉菜单中禁用特定项目有很多方面:
#1方面并不是一个真正的Swing问题,但可以在事件处理代码中完成,即使实施了#3,IMHO也应执行(即使#3似乎使#1不必要)。 / p>
对于方面2,可以通过为JComboBox使用自定义ListCellRenderer来实现。这并不像听起来那样难,只是网络上有很多代码示例无法正确执行。如果您是新手,那么很难知道可以信任哪些代码示例。 (相同的自定义ListCellRenderer可能还会使禁用的项目在用户将鼠标悬停在其上时看起来没有装饰。)
#3方面很棘手。我并不是说这是不可能的,但是(除非我不知道有一些相关的API),我不会打扰,因为这会花费太多的工作,甚至可能太笨拙了。 [编辑:如果禁用了ComboBoxModel.setSelectedItem()则不执行任何操作,这将满足您的大部分需求。并不是太笨拙,但仅此一项,单击禁用的项目仍会关闭弹出窗口。]
但是要回答您没有提出的问题,这真的是最好的设计吗?您是否真的希望用户看到包含某些禁用项的选项下拉列表,而不是仅看到有效项的下拉列表? JComboBox提供了一种机制,可用于在下拉列表弹出之前调整下拉列表中的项目,该机制为addPopupMenuListener()。您将编写自己的PopupMenuListener并在其popupMenuWillBecomeVisible()方法中添加或删除项目。
最后,考虑人们如何使用您的GUI。假设组合框当前显示为2月1日,用户希望将其更改为1月31日。是否要强制用户先更改月份,然后更改日期?还是用户可能先尝试更改日期(这会使他/她感到沮丧,因为31号会被禁用或缺席),然后再更改月份?合理的设计可能是允许用户将GUI设置为2月31日,但只能过渡,并且如果日期不正确,则不允许GUI继续进行下一步。