.
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.
.
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);
}
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); }
Someone ???
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.");
}
}
}
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);
}
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...
}
}
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.
Essa solução que postou já havia desenvolvido, com esse mesmo conceito. Segue a análogia da solução. Seeprivate 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!
Agora consegui compreender, a real necessidade desse tipo de conceito.
Valeu mesmo por solucionar minha dúvida que persistia por um tempo.
Tks.