【问题标题】:Adding JRadioButton to Group将 JRadioButton 添加到组
【发布时间】:2014-03-15 18:06:05
【问题描述】:

我在将 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 表中获取数据并创建单选并将数据放入其中,因此,我可以将它们添加到 ButtonGroup 但不能添加到 JPanel。或者,如果我不将它们添加到组并将它们添加到 JPanel 我无法正常切换它们,它们(单选按钮)就像一个复选框。

【问题讨论】:

    标签: java swing jpanel jradiobutton buttongroup


    【解决方案1】:

    您需要将每个单选按钮添加到面板和按钮组中:

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

    【讨论】:

    • jRadioButton 仅在 while() 循环中可见。您应该从循环中将按钮添加到组和面板中。
    • @Aqua 谢谢。更新了答案。
    【解决方案2】:

    当您创建按钮时,将它们同时添加到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);
                }
            });
        }
    }
    

    详情请参阅How to Use the ButtonGroup Component。

    【讨论】:

      【解决方案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 jr = new JRadioButton(rs.getString("НАЗВАНИЕ"));
             //modelRadioGroup.add(new JRadioButton(rs.getString("НАЗВАНИЕ")));
             modelRadioGroup.add(jr);
             modelsRadioPanel.add(jr);   
          }
      
          frame.add(modelsRadioPanel);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-06-30
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多