2016-06-20 5 views
2

У меня есть строка ArrayList строк, которая автоматически генерирует список флажков (разного количества) во всплывающем окне. Я в настоящее время есть две проблемы с кода ниже:Java: массив объектов и получение значений/свойств автоматически созданных флажков

  • Object[] params не работает, потому что она требует от меня, чтобы знать размер ArrayList ar заранее, и я понял, нету, чтобы получить ArrayList объектов для работы с мой код. Как я могу это исправить? Я попытался создать объект массива объектов, но я мог получить его только для отображения бессмысленного текста.
  • Как я могу получить значения/текст каждого флажка и соответствующее значение isSelected()?

Ниже мой код:

String message = "The selected servers will be shutdown."; 
Object[] params = {message, null, null, null, null, null}; 

ArrayList<String> ar = GetSet.getStopCommand(); // Example array: ./Stopplm11.sh|./Stopplm12.sh|./Stopplm14.sh|./Stopplm15.sh 

for(int i=0; i< ar.size(); i++){ 
    JCheckBox checkbox = new JCheckBox(); 
    checkbox.setText(ar.get(i).toString()); 
    checkbox.setSelected(true); 
    params[i+1]= checkbox; 
} 

int n = JOptionPane.showConfirmDialog(btnShutdownServer, params, "Shutdown Servers", JOptionPane.OK_CANCEL_OPTION); 

if (n == JOptionPane.OK_OPTION){ 
    // DO STUFF 
    //boolean buttonIsSelected= checkbox.isSelected(); 
}else{ 
    // user cancelled 
} 

Изображение, для тех, кто любит изображения:

Image for those who like images

ответ

3

Вы можете сделать его ArrayList из JCheckBox:

ArrayList<JCheckBox> checkboxes = new ArrayList<JCheckBox>(); 

Тогда вы можете сделать:

for(int i = 0; i < ar.size(); i++) 
{ 
    JCheckBox checkbox = new JCheckBox(); 
    checkbox.setText(ar.get(i).toString()); 
    checkbox.setSelected(true); 

    // add the checkbox to the ArrayList 
    checkboxes.add(checkbox); 
} 

Наконец, чтобы проверить состояние всех флажков в вашем, если условие, вы можете просто сделать:

if (n == JOptionPane.OK_OPTION){ 
    // DO STUFF 
    //boolean buttonIsSelected= checkbox.isSelected(); 

    // loop through all checkboxes in the ArrayList 
    for (JCheckBox checkbox : checkboxes) 
    { 
     // current one is selected 
     boolean buttonIsSelected = checkbox.isSelected(); 
    } 

    // rest of code in if condition 
} 
+0

Могу ли я добавить флажки в «params», как показано ниже, так что мне нужно создать только один объект для включения в «params» вместо объектов «x». ----- Объект [] params = {message, checkboxes}; – heyitsmyusername

+0

Вы можете сделать это, если хотите, но, вероятно, лучше создать простой класс, который может содержать строковое сообщение и флаги ArrayList . Тогда у вас могут быть геттеры и сеттеры для класса. Возможно, вам захочется добавить еще кое-что в класс позже. Это более гибко, и вам не нужно беспокоиться о получении ClassCastException при получении вещей из класса, как с Object [] –

+0

. Ваш код исправил мою первую проблему. Спасибо :) Последнее: когда я добавляю флажки в «params», я все равно получаю неправильный результат. Как я могу правильно отобразить объекты? Я разместил изображение в нижней части моего исходного сообщения текущего результата. – heyitsmyusername

2

Вместо того чтобы хранить params внутри массива, сохраните эти параметры в пределах ArrayList, а например:

ArrayList<Object> params = new ArrayList<Object>(); 
params.add("The selected servers will be shutdown."); 

for(int i = 0; i < ar.size(); i++) 
{ 
    JCheckBox checkbox = new JCheckBox(); 
    checkbox.setText(ar.get(i).toString()); 
    checkbox.setSelected(true); 
    params.add(checkbox); 
} 

Затем сделать params массив:

Object[] realParams = new Object(params.size()); 
realParams = params.toArray(realParams); 

И затем продолжайте остаток кода, как и следовало бы.

Смежные вопросы