如何禁用组合框中的项目?

时间:2018-12-28 11:55:57

标签: java swing combobox

如何禁用秋千组合框中的项目? 我将这些项目添加为代码,因为在我的项目中我们无法从设计中手动添加它们。我想禁用项目,例如,如果从“摇摆月份”组合框中选择了“四月”,则由于“四月”有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"))
   {



   }
  }

1 个答案:

答案 0 :(得分:0)

要回答您提出的问题,在JComboBox的下拉菜单中禁用特定项目有很多方面:

  1. 当用户选择禁用项目时不执行任何操作
  2. 禁用项目出现(例如,用灰色文字代替黑色文字)
  3. 禁用该项目 (以便单击该项目不会取消下拉菜单)

#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继续进行下一步。