2017-01-20 1 views
-2

У меня есть длинный список флажков (около 150) на JPanel на scrollPane, пользователь может проверить, если это необходимо. В конце этого процесса есть JButton, который должен взять все отмеченные флажки и поместить их описание на другой JPanel. Я довольно новичок в Java и не могу понять, как это сделать, не создавая itemListener для каждого Checkbox, что кажется очень непрактичным. Я прочитал много потоков о том, как помещать флажки в ArrayList и проверять элементы, но я до сих пор не понимаю, как это сделать. Мой текущий код выглядит примерно так:Получение много отмеченных JCheckBoxes на новом JPanel?

JCheckBox checkbx511 = new JCheckBox("This is the text I need"); 
chckbx511.setToolTipText("<html>This would be a nice bonus</html>"); 

Кто-нибудь знает простой способ получить все выбранные элементы на новый список?

+0

Итерировать список и вызывать 'isSelected()' на каждом из них? – Kayaman

+0

Примечание: много smilar-кода -> следует перебирать коллекцию. Здесь вы должны сохранить эти флажки в список (используя цикл для их создания). И использование идеи Kayaman – AxelH

ответ

0

Вы должны поместить описания для флажков в массиве, а затем создать список флажков, что-то вроде этого:

// Creating checkboxes 
String[] descriptions = { "Description 1", "Description 2", "Description 3"}; 
List<JCheckBox> checkBoxes = new ArrayList<JCheckBox>(); 
for (String description : descriptions) { 
    JCheckBox checkBox = new JCheckBox(description); 
    checkBoxes.add(checkBox); 
    jPanel.add(checkBox); 
} 

Затем при нажатии на кнопку вы просто перебираете список флажков, чтобы узнать, какие поля выбраны, и добавьте их в свою новую панель.

// On button press 
for (JCheckBox checkBox : checkBoxes) { 
    if (checkBox.isSelected()) { 
     otherJPanel.add(new JLabel(checkBox.getText())); 
    } 
} 
0

Вы должны сначала создать List

List<JCheckBox> list = new ArrayList<>(); 

Затем вам нужно хранить этот флажок в этот список. Вы либо добавить каждый по и

list.add(checkbx511); 

или изменить способ построить те использовать цикл (текст может быть в String[] итерировать это)

Затем, чтобы получить флажок, вы просто нужно перебрать свой новый список и проверить, выбрано ли оно с помощью CheckBox.isSelected(). Вы храните эти экземпляры в другом списке, и у вас есть результат.

List<JCheckBox> resultList = new ArrayList<>(); 
for(JCheckBox cb : list){ 
    if(cb.isSelected()){ 
     resultList.add(cb); 
    } 
} 

Примечание: Существует способ сделать это в поток API, но я позволю кому-то еще, чтобы написать это, потому что я не знаю его достаточно.

Примечание 2: Существует сложный способ без использования списка путем поиска в компоненте JPanel каждого экземпляра JCheckBox. Но это требует ноу структуры должны быть записаны

+0

Спасибо за этот исчерпывающий ответ! Я должен уметь это реализовать. – Lotec

+0

@Lotec, если у вас есть проблемы с этим решением, не стесняйтесь спрашивать. См. Sore Throad ответ о моем решении создать флажок в цикле, я не добавил это, так как это было действительно не нужно – AxelH

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

  • Нет связанных вопросов^_^