Могу ли я конвертировать ComboBoxModel в int? - PullRequest
0 голосов
/ 02 мая 2018

Это мой код:

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. И я не могу думать, что поставить.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Помещение кода в цикл for не принесет вам никакой пользы, поскольку фактически только одна итерация будет выполнять любую работу. Поэтому я бы предложил сохранить заявления if. Если вы хотите сократить свой код, одним из вариантов будет создание какой-либо карты для элементов arrDiv и использование следующего кода:

int index = cboRegion.getSelectedIndex();
if(index == 0) {
  cboDivision.setEnabled(false);
} else {
  cboDivision.setModel(map.get(index));
}
0 голосов
/ 02 мая 2018

Что это за arrDiv1, arrDiv2 и т. Д.?

Это на самом деле не имеет значения, и вопрос носит более общий характер и не связан с комбо-боксами. Если у вас есть их как именованные свойства, вы не сможете легко их добавить. Индексы в именах указывают, что вы можете хранить их в коллекции. Например:

Вместо того, чтобы

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())); 
}
...