[Resolved] Como capturar checkboxes selecionados com JButton

.
Salve, Salve rapaziada.

Sou iniciante na parte de swing e estou com uma dúvida.
Tenho uma aplicação com varios checkboxes e preciso saber como faço para
capturar as informações selecionadas através do evento do JButton
CyberX.

Segue o código:

public static void main(String args[]) {
		String title = "Checkbox Sample";
		JFrame frame = new JFrame(title);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel(new GridLayout(0, 1));
		Border border = BorderFactory.createTitledBorder("Pizza Toppings");
		panel.setBorder(border);
		
		JCheckBox check = new JCheckBox("Anchovies");
		panel.add(check);
		check = new JCheckBox("Garlic");
		panel.add(check);
		check = new JCheckBox("Onions");
		panel.add(check);
		check = new JCheckBox("Pepperoni");
		panel.add(check);
		check = new JCheckBox("Spinach");
		panel.add(check);
		
		JButton button = new JButton("Show selected");
		button.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// Capturar checkbox selecionados com JButton
			}
		});
		
		Container contentPane = frame.getContentPane();
		contentPane.add(panel, BorderLayout.CENTER);
		contentPane.add(button, BorderLayout.SOUTH);
		frame.setSize(300, 200);
		frame.setVisible(true);
	}

[quote=CyberX]Segue o código:

[code]
public static void main(String args[]) {
String title = “Checkbox Sample”;
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder(“Pizza Toppings”);
panel.setBorder(border);

	JCheckBox check = new JCheckBox("Anchovies");
	panel.add(check);
	check = new JCheckBox("Garlic");
	panel.add(check);
	check = new JCheckBox("Onions");
	panel.add(check);
	check = new JCheckBox("Pepperoni");
	panel.add(check);
	check = new JCheckBox("Spinach");
	panel.add(check);
	
	JButton button = new JButton("Show selected");
	button.addActionListener(new ActionListener(){
		@Override
		public void actionPerformed(ActionEvent e) {
			// Capturar checkbox selecionados com JButton
		}
	});
	
	Container contentPane = frame.getContentPane();
	contentPane.add(panel, BorderLayout.CENTER);
	contentPane.add(button, BorderLayout.SOUTH);
	frame.setSize(300, 200);
	frame.setVisible(true);
}

[/code][/quote]

Someone ???

[quote=CyberX][quote=CyberX]Segue o código:

public static void main(String args[]) {
		String title = "Checkbox Sample";
		JFrame frame = new JFrame(title);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel(new GridLayout(0, 1));
		Border border = BorderFactory.createTitledBorder("Pizza Toppings");
		panel.setBorder(border);
		
		JCheckBox check = new JCheckBox("Anchovies");
		panel.add(check);
		check = new JCheckBox("Garlic");
		panel.add(check);
		check = new JCheckBox("Onions");
		panel.add(check);
		check = new JCheckBox("Pepperoni");
		panel.add(check);
		check = new JCheckBox("Spinach");
		panel.add(check);
		
		JButton button = new JButton("Show selected");
		button.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// Capturar checkbox selecionados com JButton
			}
		});
		
		Container contentPane = frame.getContentPane();
		contentPane.add(panel, BorderLayout.CENTER);
		contentPane.add(button, BorderLayout.SOUTH);
		frame.setSize(300, 200);
		frame.setVisible(true);
	}
[/code][/quote][/quote]

Desse jeito não vale o esforço.

Olhe isso...

[code]import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;


public class Main {
	
	public static void main(String args[]) {
		String title = "Checkbox Sample";
		JFrame frame = new JFrame(title);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel(new GridLayout(0, 1));
		Border border = BorderFactory.createTitledBorder("Pizza Toppings");
		panel.setBorder(border);
		
		JCheckBox check1 = new JCheckBox("Anchovies");
		panel.add(check1);
		JCheckBox check2 = new JCheckBox("Garlic");
		panel.add(check2);
		JCheckBox check3 = new JCheckBox("Onions");
		panel.add(check3);
		JCheckBox check4 = new JCheckBox("Pepperoni");
		panel.add(check4);
		JCheckBox check5 = new JCheckBox("Spinach");
		panel.add(check5);
		
		JButton button = new JButton("Show selected");
		button.addActionListener(new MyActionListener(check1, check2, check3, check4, check5));
		
		Container contentPane = frame.getContentPane();
		contentPane.add(panel, BorderLayout.CENTER);
		contentPane.add(button, BorderLayout.SOUTH);
		frame.setSize(300, 200);
		frame.setVisible(true);
	}
	
}

e

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JOptionPane;

class MyActionListener implements ActionListener{

private JCheckBox check1;
private JCheckBox check2;
private JCheckBox check3;
private JCheckBox check4;
private JCheckBox check5;

public MyActionListener(JCheckBox check1, JCheckBox check2, JCheckBox check3, JCheckBox check4, JCheckBox check5) {
	this.check1 = check1;
	this.check2 = check2;
	this.check3 = check3;
	this.check4 = check4;
	this.check5 = check5;
}

@Override
public void actionPerformed(ActionEvent arg0) {

	if(this.check1.isSelected()){
		JOptionPane.showMessageDialog(null, "CheckBox 1: " + check1.getText() + " selecionado.");
	}
	if(this.check2.isSelected()){
		JOptionPane.showMessageDialog(null, "CheckBox 2: " + check2.getText() + "  selecionado.");
	}
	if(this.check3.isSelected()){
		JOptionPane.showMessageDialog(null, "CheckBox 3: " + check3.getText() + "  selecionado.");
	}
	if(this.check4.isSelected()){
		JOptionPane.showMessageDialog(null, "CheckBox 4: " + check4.getText() + "  selecionado.");
	}
	if(this.check5.isSelected()){
		JOptionPane.showMessageDialog(null, "CheckBox 5: " + check5.getText() + "  selecionado.");
	}
}

}[/code]

Tks Rafael_Leal mas tenho 2 dúvidas:

1st > É necessário criar uma referência para cada CheckBox ?

 JCheckBox check1 = new JCheckBox("Anchovies");  
        panel.add(check1);  
        JCheckBox check2 = new JCheckBox("Garlic");  
        panel.add(check2);  
        JCheckBox check3 = new JCheckBox("Onions");  
        panel.add(check3);  
        JCheckBox check4 = new JCheckBox("Pepperoni");  
        panel.add(check4);  
        JCheckBox check5 = new JCheckBox("Spinach");  
        panel.add(check5); 

2nd - Será que não seria possível exibir apartir de uma referência apenas ?

JCheckBox check = new JCheckBox("Anchovies");  
        panel.add(check);  
        check = new JCheckBox("Garlic");  
        panel.add(check);  
        check = new JCheckBox("Onions");  
        panel.add(check);  
        check = new JCheckBox("Pepperoni");  
        panel.add(check);  
        check = new JCheckBox("Spinach");  
        panel.add(check); 

PS: Estou perguntando pois não entendo muito bem de Swing, OK !?!?

Waiting…

Essa solução que postou já havia desenvolvido, com esse mesmo conceito.
Segue a análogia da solução.

See

	private static String cars[]={"Ferrari F500", "Lamborghini Gallardo","Porche Carrera", "Chevrolet Camaro"};
	private static JCheckBox checkBox[] = new JCheckBox[cars.length];
	
	public static void main(String[] args) {
		JPanel panel = new JPanel(new GridLayout(0, 1));
		Border border = BorderFactory.createTitledBorder("Cars");
		panel.setBorder(border);
		
		for(int i = 0; i < checkBox.length; i++) {
			checkBox[i] = new JCheckBox(cars[i]);
			panel.add(checkBox[i]);
		}
		
		JButton button = new JButton("Submit");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				for (int i = 0; i < checkBox.length; i++) {
					if(checkBox[i].isSelected())
						System.out.println(checkBox[i].getText());
				}
			}
		});
		panel.add(button);
		layoutConstructor(panel);
	}
	
	/**
	 * @Method layoutConstructor responsible to create the layout of interface.	 
	 * @param panel - Parameter panel to create the panel.
	 */
	private static void layoutConstructor(JPanel panel){
		JFrame frame = new JFrame("Eg: CheckBox Cars");
		Container container = frame.getContentPane();
		container.add(panel, BorderLayout.CENTER);
		frame.pack();
		frame.setLocation(500, 250);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

[quote=CyberX]Tks Rafael_Leal mas tenho 2 dúvidas:

1st > É necessário criar uma referência para cada CheckBox ?

 JCheckBox check1 = new JCheckBox("Anchovies");  
        panel.add(check1);  
        JCheckBox check2 = new JCheckBox("Garlic");  
        panel.add(check2);  
        JCheckBox check3 = new JCheckBox("Onions");  
        panel.add(check3);  
        JCheckBox check4 = new JCheckBox("Pepperoni");  
        panel.add(check4);  
        JCheckBox check5 = new JCheckBox("Spinach");  
        panel.add(check5); 

[/quote]

Não mas é recomendável. Por quê? Pois se em algum momento você precisar do valor de um checkBox você não precisará de fazer marabarismos como esses?

[code]for(Compnent c : jPanel_SeuPanel.getComponents()){
if(c instanceOf JCheckBox){
//e ainda verifica se é esse checkBox que você quer obter o valor…
}

}[/code]

[quote=CyberX]
2nd - Será que não seria possível exibir apartir de uma referência apenas ?

JCheckBox check = new JCheckBox("Anchovies");  
        panel.add(check);  
        check = new JCheckBox("Garlic");  
        panel.add(check);  
        check = new JCheckBox("Onions");  
        panel.add(check);  
        check = new JCheckBox("Pepperoni");  
        panel.add(check);  
        check = new JCheckBox("Spinach");  
        panel.add(check); 

PS: Estou perguntando pois não entendo muito bem de Swing, OK !?!?

Waiting…[/quote]

Respondido acima.

Depois jeito você terá que perguntar o Panel ou Frame que são seus componetes e verificar se o componente eu um checkBox e se ainda é o checkBox que você precisa.

[quote=CyberX]Essa solução que postou já havia desenvolvido, com esse mesmo conceito.
Segue a análogia da solução.

See

[code]
private static String cars[]={"Ferrari F500", "Lamborghini Gallardo","Porche Carrera", "Chevrolet Camaro"};
private static JCheckBox checkBox[] = new JCheckBox[cars.length];

public static void main(String[] args) {
	JPanel panel = new JPanel(new GridLayout(0, 1));
	Border border = BorderFactory.createTitledBorder("Cars");
	panel.setBorder(border);
	
	for(int i = 0; i < checkBox.length; i++) {
		checkBox[i] = new JCheckBox(cars[i]);
		panel.add(checkBox[i]);
	}
	
	JButton button = new JButton("Submit");
	button.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			for (int i = 0; i < checkBox.length; i++) {
				if(checkBox[i].isSelected())
					System.out.println(checkBox[i].getText());
			}
		}
	});
	panel.add(button);
	layoutConstructor(panel);
}

/**
 * @Method layoutConstructor responsible to create the layout of interface.	 
 * @param panel - Parameter panel to create the panel.
 */
private static void layoutConstructor(JPanel panel){
	JFrame frame = new JFrame("Eg: CheckBox Cars");
	Container container = frame.getContentPane();
	container.add(panel, BorderLayout.CENTER);
	frame.pack();
	frame.setLocation(500, 250);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setVisible(true);
}

[/code][/quote]

±

Nome que ActionListener ele não conhece os checkBoxs s só sabe fazer uma função especifica para eles…

Imagine o caso que: “Eu preciso que os checkBox 1 e 3 o checkBox 5 também deverá AUTOMATICAMENTE ser preenchido enquando 2 e 4 des-selecionados.”…
Na minha solução seria tranquilo…

if(check1.isSelected() && check.isSelected()){ check5.setSelected(true); check4.setSelected(false); check2.setSelected(false); }

No seu exemplo iria ser mais tenso!

Agora consegui compreender, a real necessidade desse tipo de conceito.
Valeu mesmo por solucionar minha dúvida que persistia por um tempo.

Tks.