2015-11-26 5 views
1

У меня есть свинг с примерно 50 флажками, а пример кода для 3 ниже.Получите количество флажков в Swing

JCheckBox checkboxOne = new JCheckBox("One"); 
JCheckBox checkboxTwo = new JCheckBox("Two"); 
JCheckBox checkboxThree = new JCheckBox("Three"); 


// add these check boxes to the container... 

// add an action listener 
ActionListener actionListener = new ActionHandler(); 
checkboxOne.addActionListener(actionListener); 
checkboxTwo.addActionListener(actionListener); 
checkboxThree.addActionListener(actionListener); 
  
// code of the action listener class 
  
class ActionHandler implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent event) { 
        JCheckBox checkbox = (JCheckBox) event.getSource(); 
        if (checkbox == checkboxOne) { 
            System.out.println("Checkbox #1 is clicked"); 
        } else if (checkbox == checkboxTwo) { 
            System.out.println("Checkbox #2 is clicked"); 
        } else if (checkbox == checkboxThree) { 
            System.out.println("Checkbox #3 is clicked"); 
        } 
    } 
} 

Здесь я хочу, чтобы перебрать 50 флажков, как создание ArrayList доступных флажков и петли их, чтобы проверить, который проверяемые. Я не могу понять, как создать флажок «ArrayList».

Я ссылался на Array of checkboxes in java, но я не могу понять, как его использовать?

Пожалуйста, дайте мне знать, как это можно сделать.

+0

Что именно вы не понимаете, в ответ вы связаны? Если вы успешно создали arraylist, вы можете просто сделать что-то подобное, чтобы увидеть, какие из них отмечены: 'for (JCheckBox cb: checkBoxes) {if (cb.isSelected()) {// Что делать, если он выбран}} ' –

+0

Привет @LuxxMiner, я пробовал даже это, я использовал' for (JCheckBox cb: checkboxes) {if (cb.isSelected()) {System. out.println ("selected");} else {System.out.println ("no");}} ', но моя консоль печатает' no' на три, хотя я проверил, а затем нажал кнопку – user3872094

+0

У вас есть изменил ваш код и задал новый вопрос поверх этого. Это не то, как вы должны это делать. Если у вас есть новый вопрос, задайте новый вопрос. Цель редактирования - уточнить или показать ход вопроса. Теперь пользователи ищут тот же оригинальный вопрос, что и вы найдете нечувствительный ответ. ** У меня есть ответ на ваш новый вопрос. Пожалуйста, опубликуйте как новый и отложите это в исходную область ** – malinator

ответ

4

Создайте ArrayList из JCheckBox и добавьте их под заказ. Затем, вы можете использовать функцию indexOf(), чтобы получить номер, например:

public class TestFrame extends JFrame { 

    public TestFrame() { 
     setLayout(new GridLayout()); 
     setSize(500, 500); 

     JCheckBox checkboxOne = new JCheckBox("One"); 
     JCheckBox checkboxTwo = new JCheckBox("Two"); 
     JCheckBox checkboxThree = new JCheckBox("Three"); 

     final ArrayList<JCheckBox> checkBoxes = new ArrayList<>(); 

     add(checkboxOne); 
     add(checkboxTwo); 
     add(checkboxThree); 

     checkBoxes.add(checkboxOne); 
     checkBoxes.add(checkboxTwo); 
     checkBoxes.add(checkboxThree); 

     ActionListener actionListener = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent event) { 
       JCheckBox checkbox = (JCheckBox) event.getSource(); 
       int index = checkBoxes.indexOf(checkbox) + 1; 
       System.out.println("Checkbox #" + index + " is clicked"); 
      } 
     }; 
     checkboxOne.addActionListener(actionListener); 
     checkboxTwo.addActionListener(actionListener); 
     checkboxThree.addActionListener(actionListener); 
    } 

    public static void main(String[] args) { 
     TestFrame frame = new TestFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

Пожалуйста, обратите внимание, что это адаптация кода. Этот пример был сделан как можно ближе к вашему коду, поэтому предполагается, что единственные внесенные изменения отражают точку, которую я пытаюсь понять.

Редактировать

Поскольку вы изменили свой вопрос и новый был сделан, здесь идет вторая часть ответа:

и в моем действии слушателя, я пытался получить отмеченные значения, но он выбрасывает null как имя, и хотя я проверил, вывод показывает как не выбранный.

Изменить код, чтобы использовать getText() вместо getName(), такие как:

JButton btnNewButton = new JButton("New button"); 
btnNewButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     System.out.println(checkBoxes.size()); 
     for (int i = 0; i < checkBoxes.size(); i++) { 
      if (checkBoxes.get(i).isSelected()) { 
       System.out.println(" Checkbox " + i + " and " + checkBoxes.get(i).getText() + " is selected"); 
      } else { 
       System.out.println(
         " Checkbox " + i + " and " + checkBoxes.get(i).getText() + " is noooooot selected"); 
      } 
     } 
    } 

}); 
2

Для того, чтобы определить ArrayList с CheckBoxes пожалуйста, обратитесь к следующему примеру:

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

Добавить свой JCheckBox элементы к ArrayList с использованием стандартного подхода, например:

JCheckBox chkBox1 = new JCheckBox(); 
chkBoxes.add(chkBox1); 

Interatve по списку и осуществлять проверку, если выбран с помощью JCheckBox метода #.isSelected() следующим образом:

for(JCheckBox chkBox : chkBoxes){ 
    chkBox.isSelected(); // do something with this! 
} 
0

Если вам нужно получить все чекбоксы от фактической существующей рамы/Панель, вы можете использовать getComponents() метод и один за другим, если это флажок (не уверен, что getComponents поддерживается всеми контейнерами)

например:

Component[] comps = jScrollPane.getComponents(); 
ArrayList<JCheckBox> chckBoxes= new ArrayList<JCheckBox>(); 


for(Component comp : comps) { 
    if(comp instanceof JCheckBox) { 
      chckBoxes.add((JCheckBox) comp); 
    } 
} 

(Основана @Get all swing components in a container)