Добавление JRadioButton в группу

У меня проблемы с добавлением JRadioButton в ButtonGroup, а затем в JPanel, вот код:

void modelsRadio () throws SQLException {

    JPanel modelsRadioPanel = new JPanel();

    Statement statement = db.setConnection();
    ResultSet rs = statement.executeQuery("SELECT * FROM МОДЕЛИ");
    ButtonGroup modelRadioGroup = new ButtonGroup();

    while (rs.next()) {

        modelsRadioPanel.add(new JRadioButton(rs.getString("НАЗВАНИЕ")));
        //modelRadioGroup.add(new JRadioButton(rs.getString("НАЗВАНИЕ")));
    }

    frame.add(modelsRadioPanel);
}

Идея состоит в том, чтобы получить данные из Oracle SQL Table и создать радио и поместить в них данные, поэтому я могу добавить их в ButtonGroup, но не могу добавить в JPanel. Или, если я не добавляю их в группу и не добавляю в JPanel, я не могу нормально переключаться между ними, они (переключатели) работают как флажки.


person nemelianov    schedule 15.03.2014    source источник


Ответы (3)


Вам нужно добавить каждую радиокнопку на панель и группу кнопок как:

void modelsRadio () throws SQLException {

        JPanel modelsRadioPanel = new JPanel();

        Statement statement = db.setConnection();
        ResultSet rs = statement.executeQuery("SELECT * FROM МОДЕЛИ");
        ButtonGroup modelRadioGroup = new ButtonGroup();

        while (rs.next()) {
           JRadioButton jRadioButton =new JRadioButton(rs.getString("НАЗВАНИЕ")));

          //Add radio button to the panel
          modelsRadioPanel.add(jRadioButton);

          //Add radio button to the button group
          modelRadioGroup.add(jRadioButton);

          //Same for the remaining JRadioButton's 

        }

       // No need to add the button group to the panel

        frame.add(modelsRadioPanel);
    }
person Sandhu Santhakumar    schedule 15.03.2014
comment
jRadioButton виден только внутри цикла while(). Вы должны добавить кнопку в группу и панель из цикла. - person tenorsax; 15.03.2014
comment
@Aqua Спасибо. Обновил ответ. - person Sandhu Santhakumar; 15.03.2014

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

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;

public class TestRadio {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("TestRadio");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                ButtonGroup modelRadioGroup = new ButtonGroup();

                for (int i = 0; i < 5; i++) {
                    JRadioButton b1 = new JRadioButton("Radio" + i);

                    modelRadioGroup.add(b1);
                    panel.add(b1);
                }

                f.add(panel);
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}

Подробнее см. Как использовать компонент ButtonGroup.

person tenorsax    schedule 15.03.2014

Хм, решаю вот так:

void modelsRadio () throws SQLException {

    JPanel modelsRadioPanel = new JPanel();

    Statement statement = db.setConnection();
    ResultSet rs = statement.executeQuery("SELECT * FROM МОДЕЛИ");
    ButtonGroup modelRadioGroup = new ButtonGroup();

    while (rs.next()) {

       JRadioButton jr = new JRadioButton(rs.getString("НАЗВАНИЕ"));
       //modelRadioGroup.add(new JRadioButton(rs.getString("НАЗВАНИЕ")));
       modelRadioGroup.add(jr);
       modelsRadioPanel.add(jr);   
    }

    frame.add(modelsRadioPanel);
}
person nemelianov    schedule 15.03.2014