[Resolved] Como capturar checkboxes selecionados com JButton

10 respostas
C

.
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.

10 Respostas

C

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);
	}
C
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);
	}
C

Someone ???

C
R
CyberX:
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);
	}

Desse jeito não vale o esforço.

Olhe isso...

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

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

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…

C

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);
	}
R
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);

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?

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

}
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...

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.

R
CyberX:
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);
	}

+-

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!

C

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

Tks.

Criado 10 de abril de 2012
Ultima resposta 11 de abr. de 2012
Respostas 10
Participantes 2