我可以将ComboBoxModel转换为int吗?

问题描述 投票:0回答:2

这是我的代码:

ComboBoxModel arrDiv1 = new DefaultComboBoxModel(new String[]{"Alaminos 
City", "Batac City", "Candon City", "Dagupan City",
"Ilocos Norte", "Ilocos Sur", "La Union", "Laoag City", "Pangasinan I", 
"Pangasinan II", "San Carlos",
"San Fernando", "Urdaneta City", "Vigan City"});

ComboBoxModel arrDiv2 = new DefaultComboBoxModel(new String[]{"Batanes", 
"Cagayan", "Cauayan City", "City of Ilagan",
"Isabela", "Nueva Vizcaya", "Quirino", "Santiago City", "Tuguegarao City"});

ComboBoxModel arrDiv3 = new DefaultComboBoxModel(new String[]{"Angeles 
City", "Aurora", "Balanga City", "Bataan", "Bulacan",
"Cabanatuan City", "Gapan City", "Mabalacat City", "Malolos City", 
"Meycauayan City", "Munoz Science City",
"Nueva Ecija", "Olongapo City", "Pampanga", "San Fernando City", "San Jose 
City", "San Jose del Monte City",
"Tarlac", "Tarlac City", "Zambales"});  


if(cboRegion.getSelectedIndex()==0) {
    cboDivision.setEnabled(false);
}
else if(cboRegion.getSelectedIndex()==1) {
    cboDivision.setModel(arrDiv1);
}
else if(cboRegion.getSelectedIndex()==2) {
    cboDivision.setModel(arrDiv2);
}
else if(cboRegion.getSelectedIndex()==3) {
    cboDivision.setModel(arrDiv3);
}

我想把它放在for循环中以缩短代码。

if(cboRegion.getSelectedIndex()==ctr) {
    if(ctr==0) {
        cboDivision.setEnabled(false);
    }
    cboDivision.setModel(?????);
}

但是,我不知道在括号内放什么,因为ComboBoxModel不是int。我想不出要放什么。

java parsing combobox int comboboxmodel
2个回答
3
投票

这些是什么arrDiv1,arrDiv2等?

它实际上并不重要,问题是更一般的java,与组合框无关。如果您将它们作为命名属性,则无法轻松添加它们。名称中的索引指出您可以将它们保存在集合中。例如:

而不是拥有

Something arrDiv1;
Something arrDiv2;
Something arrDiv3;

有类似的东西

List<Something> arrDivs=new ArrayList<>();
arrDivs.add(arrDiv1);
arrDivs.add(arrDiv2);
//  etc.

这样你就可以在一个集合中保存类似的对象而不是命名它们1,2,3等。如果你需要添加更多的元素(你使你的代码更通用),这将有助于长期。另一种解决方案是在名称中使用索引创建越来越多的属性。

然后你的代码可能是这样的:

if (cboRegion.getSelectedIndex() == ctr) {
      if (ctr == 0) {
         cboDivision.setEnabled(false);                                
      }

      // Maybe add a check for out of bounds?
      cboDivision.setModel(arrDivs.get(getSelectedIndex())); 
}

0
投票

将代码放在for循环中对你没有任何好处,因为实际上只有一次迭代可以完成任何工作。所以我建议保留if语句。如果要缩短代码,可以选择为arrDiv元素创建某种映射,并使用以下代码:

int index = cboRegion.getSelectedIndex();
if(index == 0) {
  cboDivision.setEnabled(false);
} else {
  cboDivision.setModel(map.get(index));
}
© www.soinside.com 2019 - 2024. All rights reserved.