【问题标题】:Radio buttons group with both options enabled启用了两个选项的单选按钮组
【发布时间】:2016-07-24 00:17:36
【问题描述】:

我已经为性别创建了一个按钮组,但仍然启用了两个单选按钮。我尝试将性别组交换为年级。 yearlevel 确实很好,但仍然启用了两个单选按钮的性别。

这是我的代码:

public class myFirstGUI extends JFrame {
    JPanel panel = new JPanel();
    JLabel lblName = new JLabel("Name:");
    JLabel lblyl = new JLabel("Year Level:");
    JLabel lblCourse = new JLabel("Course:");
    JLabel lblProg = new JLabel("Program:");
    JLabel lblGender = new JLabel("Gender:"); //Gender
    JTextField txtName = new JTextField();
    JButton btnSubmit = new JButton("Submit");
    JButton btnReset = new JButton("Reset");
    GridBagLayout gLayout = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    JComboBox cboProgram = new JComboBox();
    JRadioButton rbtn1 = new JRadioButton("1st");
    JRadioButton rbtn2 = new JRadioButton("2nd");
    JRadioButton rbtn3 = new JRadioButton("3rd");
    JRadioButton rbtn4 = new JRadioButton("4th");
    JRadioButton rbtn5 = new JRadioButton("5th");
    JRadioButton rbtnM = new JRadioButton("Male"); //Gender Male
    JRadioButton rbtnF = new JRadioButton("Female"); //Gender Female
    JCheckBox chk003a = new JCheckBox("ITE003A");
    JCheckBox chk003 = new JCheckBox("CPE003");
    JCheckBox chk201 = new JCheckBox("CS201");
    ButtonGroup bg = new ButtonGroup();
    ButtonGroup bg1 = new ButtonGroup();

    public void setYearLevel() {
        bg1.add(rbtn1);
        bg1.add(rbtn2);
        bg1.add(rbtn3);
        bg1.add(rbtn4);
        bg1.add(rbtn5);
    }

    public void setGender() { //Gender
        bg.add(rbtnM);
        bg.add(rbtnF);
    }

    public void setProgram() {
        cboProgram.addItem("CPE");
        cboProgram.addItem("IE");
        cboProgram.addItem("ECE");
    }

    public myFirstGUI() {
        setYearLevel();
        setProgram();
        setSize(300, 500);
        panel.setBackground(Color.CYAN);
        setTitle("My First GUI");
        add(panel);
        panel.setLayout(gLayout);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.ipadx = 10;

        gbc.gridx = 0;
        gbc.gridy = 0;
        panel.add(lblName, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        panel.add(txtName, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        panel.add(lblGender, gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        panel.add(rbtnM, gbc);

        gbc.gridx = 1;
        gbc.gridy = 2;
        panel.add(rbtnF, gbc);

        rbtnM.setBackground(Color.cyan);
        rbtnF.setBackground(Color.cyan);

        gbc.gridx = 0;
        gbc.gridy = 3;
        panel.add(lblProg, gbc);

        gbc.gridx = 1;
        gbc.gridy = 3;
        panel.add(cboProgram, gbc);

        chk003a.setBackground(Color.cyan);
        chk003.setBackground(Color.cyan);
        chk201.setBackground(Color.cyan);

        gbc.gridx = 0;
        gbc.gridy = 4;
        panel.add(lblCourse, gbc);

        gbc.gridx = 1;
        gbc.gridy = 4;
        panel.add(chk003a, gbc);

        gbc.gridx = 1;
        gbc.gridy = 5;
        panel.add(chk003, gbc);

        gbc.gridx = 1;
        gbc.gridy = 6;
        panel.add(chk201, gbc);

        gbc.gridx = 0;
        gbc.gridy = 7;
        panel.add(lblyl, gbc);

        gbc.gridx = 1;
        gbc.gridy = 7;
        panel.add(rbtn1, gbc);

        gbc.gridx = 1;
        gbc.gridy = 8;
        panel.add(rbtn2, gbc);

        gbc.gridx = 1;
        gbc.gridy = 9;
        panel.add(rbtn3, gbc);

        gbc.gridx = 1;
        gbc.gridy = 10;
        panel.add(rbtn4, gbc);

        gbc.gridx = 1;
        gbc.gridy = 11;
        panel.add(rbtn5, gbc);

        rbtn1.setBackground(Color.cyan);
        rbtn2.setBackground(Color.cyan);
        rbtn3.setBackground(Color.cyan);
        rbtn4.setBackground(Color.cyan);
        rbtn5.setBackground(Color.cyan);

        gbc.gridx = 0;
        gbc.gridy = 12;
        panel.add(btnReset, gbc);

        gbc.gridx = 1;
        gbc.gridy = 12;
        panel.add(btnSubmit, gbc);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        btnSubmit.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(myFirstGUI.this, "Welcome " + txtName.getText() +
                    "\nProgram " + cboProgram.getSelectedItem() +
                    "\nYear Level: " + getYL());
            }

        });

        btnReset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                txtName.setText("");
                bg.clearSelection();
                bg1.clearSelection();
                cboProgram.setSelectedIndex(0);
            }
        });
    }
    public String getYL() {
        if (rbtn1.isSelected())
            return "1st";
        else if (rbtn2.isSelected())
            return "2nd";
        else if (rbtn3.isSelected())
            return "3rd";
        else if (rbtn4.isSelected())
            return "4th";
        else if (rbtn5.isSelected())
            return "5th";
        else
            return "Please select your level";
    }

    public static void main(String[] args) {
        new myFirstGUI().show();
    }
}

【问题讨论】:

  • 不确定您到底想做什么,但您可以使用 java.awt.Component.setEnabled(boolean) 启用/禁用元素。
  • 关于“myFirstGUI”的旁注:如果您即将学习 Java 中的 GUI,那么请考虑使用 JavaFX 而不是 Swing,因为 Swing 处于维护模式,而 JavaFX 是指定的继任者。
  • @Juriel 看看我的解决方案,如果有帮助请告诉我。
  • @Puce 将尝试 JavaFX。谢谢! :)

标签: java radio-button


【解决方案1】:

我不确定您是否在此处粘贴了不完整的代码,因为我没有看到您的程序中对 setGender() 函数的调用。由于单选按钮未分配给按钮组,这可能会导致问题。

【讨论】:

  • 是的。没有 setGender() 谢谢!
【解决方案2】:

如果您问为什么您的 JRadioButton for Male are Female 都被选中,这就是您可以做的。

ButtonGroup group = new ButtonGroup();
group.add(btnM);
group.add(btnF);

您需要将属于同一类别(组)的单选按钮分组。 将它们添加到组后,只会选择一个 JRadioButton

【讨论】:

  • 我做了兄弟。它被命名为 bg1。两者都启用的原因是因为我没有 setGender()。感谢您的解决方案:)
猜你喜欢
  • 2013-04-15
  • 2017-09-02
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多