JRadioButton выбирает последний

мой вопрос: - Когда у меня есть несколько JRadioButtons, он выбирает только последний, который будет помещен в мою таблицу базы данных. Я много пробовал, и я не могу понять, почему он вставляет только последний RadioButton. Даже когда я нажимаю другую кнопку, независимо от того, что она всегда выбирает последней, которая является коркой без глютена. Пожалуйста, помогите мне. Вот моя часть кода, связанная с этими вопросами.

JButton btnFinish = new JButton("Finish");
    btnFinish.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            try{
                close();
                String query = "insert into Exam2 (FullName, Address, Phonenumber, PizzaSize, CrustType, Toppings, Quantity) values (?,?,?,?,?,?,?)";
                    java.sql.PreparedStatement pst= con.prepareStatement(query);


                    pst.setString(1, txtName.getText());
                    pst.setString(2, txtAddress.getText());
                    pst.setString(3, txtNumber.getText());
                    pst.setString(4, rdbtnSmall.getText());
                    pst.setString(4, rdbtnMedium.getText());
                    pst.setString(4, rdbtnLarge.getText());
                    pst.setString(5, rdbtnHandTossed.getText());
                    pst.setString(5, rdbtnHandmadePan.getText());
                    pst.setString(5, rdbtnBrooklynStyle.getText());
                    pst.setString(5, rdbtnGlutenFreeCrust.getText());
                    pst.setString(6, rdbtnPepperoni.getText());
                    pst.setString(6, rdbtnItalianSausage.getText());
                    pst.setString(6, rdbtnBeef.getText());
                    pst.setString(6, rdbtnHam.getText());
                    pst.setString(6, rdbtnBacon.getText());
                    pst.setString(6, rdbtnOlives.getText());
                    pst.setString(6, rdbtnMushrooms.getText());
                    pst.setString(6, rdbtnOnions.getText());
                    pst.setString(7, textField.getText());



                    pst.execute();
                    close();




                }catch(Exception i) {
                        System.err.println("Exception: " + i.getMessage());
                        JOptionPane.showMessageDialog(null, "There has been an error connecting to the database");
                    }



        }
    });

    JSeparator separator = new JSeparator();

    JLabel lblPizzaSizeAnd = new JLabel("Pizza Size And Crust");
    lblPizzaSizeAnd.setFont(new Font("Lucida Grande", Font.PLAIN, 15));

    rdbtnSmall = new JRadioButton("Small(10\")");

    rdbtnMedium = new JRadioButton("Medium(12\")");

    rdbtnLarge = new JRadioButton("Large(14\")");

    JSeparator separator_1 = new JSeparator();

    JSeparator separator_2 = new JSeparator();
    separator_2.setOrientation(SwingConstants.VERTICAL);

    rdbtnHandmadePan = new JRadioButton("HandMade Pan");
    rdbtnHandmadePan.setToolTipText("Two layers of cheese, toppings to the edge, and a crust that bakes up golden and crispy with a buttery taste.");

    rdbtnHandTossed = new JRadioButton("Hand Tossed");
    rdbtnHandTossed.setToolTipText("Garlic-seasoned crust with a rich, buttery taste.");

    rdbtnBrooklynStyle = new JRadioButton("Brooklyn Style");
    rdbtnBrooklynStyle.setToolTipText("Hand stretched to be big, thin, and perfectly foldable.");

    rdbtnGlutenFreeCrust = new JRadioButton("Gluten Free Crust");
    rdbtnGlutenFreeCrust.setToolTipText("Domino's pizza made with a Gluten Free Crust.");

    group = new ButtonGroup();
    group.add(rdbtnHandmadePan);
    group.add(rdbtnHandTossed);
    group.add(rdbtnBrooklynStyle);
    group.add(rdbtnGlutenFreeCrust);

    JSeparator separator_3 = new JSeparator();

    JLabel lblToopings = new JLabel("Toppings");
    lblToopings.setFont(new Font("Lucida Grande", Font.PLAIN, 15));

    rdbtnPepperoni = new JRadioButton("Pepperoni");

    rdbtnItalianSausage = new JRadioButton("Italian Sausage");

    rdbtnBeef = new JRadioButton("Beef");

    rdbtnHam = new JRadioButton("Ham");

    rdbtnBacon = new JRadioButton("Bacon");

    rdbtnOlives = new JRadioButton("Olives");

    rdbtnMushrooms = new JRadioButton("Mushrooms");

    rdbtnOnions = new JRadioButton("Onions");

    JLabel lblQuantity = new JLabel("Quantity");

    textField = new JTextField();
    textField.setColumns(10);

Спасибо!!


person tharealdeal15    schedule 12.11.2014    source источник
comment
Я не уверен, что вы действительно ожидаете, учитывая, что вы назначаете несколько значений одному столбцу...   -  person MadProgrammer    schedule 12.11.2014
comment
хорошо, как еще u = вы можете получить все радиокнопки для записи в базу данных ... не могли бы вы использовать ButtonGroup с sql для вставки данных радиокнопок в ButtonGroup?   -  person tharealdeal15    schedule 12.11.2014
comment
Но вам не нужны ВСЕ из них, вам просто нужен ИЗБРАННЫЙ ..   -  person MadProgrammer    schedule 12.11.2014


Ответы (1)


Вы присваиваете несколько значений одному столбцу...

pst.setString(4, rdbtnSmall.getText());
pst.setString(4, rdbtnMedium.getText());
pst.setString(4, rdbtnLarge.getText());

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

Вы можете использовать ButtonGroup, чтобы более легко получить выбранную кнопку из группы...

ButtonModel model = bg.getSelection();
String selection = model == null ? "Nothing" : model.getActionCommand();

И для запускаемого примера...

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private ButtonGroup bg;

        public TestPane() {

            JRadioButton red = new JRadioButton("Red");
            red.setActionCommand("Red");
            JRadioButton blue = new JRadioButton("Blue");
            blue.setActionCommand("Blue");
            JRadioButton green = new JRadioButton("Green");
            green.setActionCommand("Green");

            bg = new ButtonGroup();
            bg.add(red);
            bg.add(blue);
            bg.add(green);

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.anchor = GridBagConstraints.WEST;
            add(red, gbc);
            add(blue, gbc);
            add(green, gbc);

            gbc.anchor = GridBagConstraints.CENTER;
            JButton select = new JButton("OK");
            add(select, gbc);

            select.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    ButtonModel model = bg.getSelection();
                    String selection = model == null ? "Nothing" : model.getActionCommand();
                    JOptionPane.showMessageDialog(TestPane.this, "You selected " + selection);
                }
            });

        }

    }

}

Пример небольшой базы данных

ButtonModel model = sizeButtonGroup.getSelection(); 
String size = model == null ? "Small" : model.getActionCommand();

pst.setString(4, size);

// Repeat for other groups/columns
person MadProgrammer    schedule 12.11.2014
comment
так я сделал бы что-то вроде как что-то вроде этого? stackoverflow.com/questions/11050074 / - person tharealdeal15; 12.11.2014
comment
Это один из способов сделать это, но вы можете сделать это проще с помощью ButtonGroup, смотрите обновления - person MadProgrammer; 12.11.2014
comment
Спасибо, что мне очень помогли! Но последний вопрос, как это будет работать с моим подготовленным отчетом для моей базы данных sql? - person tharealdeal15; 12.11.2014
comment
Если бы вы могли помочь еще раз, пожалуйста. Как мне это сделать, если я хочу иметь возможность выбирать несколько переключателей? потому что вы не можете сделать это с группами кнопок. Как большая помощь очень ценится. - person tharealdeal15; 12.11.2014
comment
1- Вам понадобится несколько столбцов базы данных или система, если вы знаете, как анализировать комбинированные результаты в одном столбце; 2- Затем вы должны isSelected из JRadioButton определить, следует ли его включать. В этом случае вам следует подумать об использовании JCheckBox, так как визуально он более привлекателен... - person MadProgrammer; 12.11.2014