如何将一个 JButton 与一组 JRadioButton 连接起来?

How to connect a JButton with a group of JRadioButtons?

我正在创建一个基本的 GUI 框架。该框架有 10 个单选按钮和一个 Submit 按钮。用户选择一个选项 (JRadioButtons) 并单击 Submit(JButton) 按钮。单击 提交 按钮时,用户选择的选项会出现在不同的框架上。

我希望提交按钮能够识别用户选择的 JRadioButton。 我把我的代码放在这里供参考。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Frame2 extends JFrame{

private JFrame frame2;
private JLabel label2;
private JButton button2;
private JRadioButton r1;
private JRadioButton r2;
private JRadioButton r3;
private JRadioButton r4;
private JRadioButton r5;
private JRadioButton r6;
private JRadioButton r7;
private JRadioButton r8;
private JRadioButton r9;
private JRadioButton r10;
public ButtonGroup group;


Frame2(){
    setLayout(new BorderLayout());
    setSize(new Dimension(1304,690));
    getContentPane().setBackground(Color.DARK_GRAY);
    label2= new JLabel(" Choose a topic: ");
    label2.setFont(new Font("Seriff",Font.BOLD, 14));
    label2.setForeground(Color.WHITE);
    button2=new JButton("Submit");
    add(label2, BorderLayout.NORTH);        
    JPanel centerPanel = new JPanel(new GridLayout(2, 5));
    centerPanel.add(r1=new JRadioButton("Introduction"));
    centerPanel.add(r2=new JRadioButton("Class and Objects"));
    centerPanel.add(r3=new JRadioButton("Object Oriented Programming Concepts"));
    centerPanel.add(r4=new JRadioButton("JAVA literals, constants, variables"));
    centerPanel.add(r5=new JRadioButton("Loops"));
    centerPanel.add(r6=new JRadioButton("Functions/Methods"));
    centerPanel.add(r7=new JRadioButton("Strings"));
    centerPanel.add(r8=new JRadioButton("Arrays"));
    centerPanel.add(r9=new JRadioButton("Time Complexity"));
    centerPanel.add(r10=new JRadioButton("Data Structures"));
    add(centerPanel, BorderLayout.CENTER);
    group= new ButtonGroup();
    group.add(r1); 
    group.add(r2); 
    group.add(r3);
    group.add(r4);
    group.add(r5);
    group.add(r6);
    group.add(r7);
    group.add(r8);
    group.add(r9);
    group.add(r10);
    add(button2, BorderLayout.SOUTH);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    
    
    button2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==button2) {
                Layouts l=new Layouts();
                l.main(null);
                dispose();
                
            }
            
        }
    });
}



public static void main(String[] args) {
    Frame2 fr2=new Frame2();
    
}   
}`

提前致谢。

如果你把 JRadioButtons 放在一个数组中就容易多了。

以下是我对您的代码所做的更改,以使其更易于修改和理解。

  1. 我添加了对 SwingUtilities invokeLater 方法的调用,以确保 Swing 组件的创建和执行发生在 Event Dispatch Thread.

  2. 我在方法中创建了个人 JPanels。通过分离 JPanel 代码,我可以更轻松地一次专注于 GUI 的一部分。

  3. 必须以正确的顺序调用构造 JFrame 的方法。在使 JFrame 可见之前,您必须创建所有 Swing 组件。

这是一种将 JButton 与一组 JRadioButtons 联系起来的方法。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class RadioButtonTest {

    private JButton button2;

    private JRadioButton[] rb;

    private ButtonGroup group;

    public RadioButtonTest() {
        JFrame frame = new JFrame("Java Tutorials");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBackground(Color.DARK_GRAY);

        frame.add(createMainPanel());
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new BorderLayout());

        JLabel label2 = new JLabel(" Choose a topic: ");
        label2.setFont(new Font("Seriff", Font.BOLD, 14));
        label2.setForeground(Color.WHITE);
        panel.add(label2, BorderLayout.NORTH);

        panel.add(createButtonPanel(), BorderLayout.CENTER);

        button2 = new JButton("Submit");
        button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == button2) {
                    for (int i = 0; i < rb.length; i++) {
                        if (rb[i].isSelected()) {
                            String text = rb[i].getText();
                            System.out.println(text);
                            // Do your second JFrame
                        }
                    }
                }
            }
        });
        panel.add(button2, BorderLayout.SOUTH);

        return panel;
    }

    private JPanel createButtonPanel() {
        JPanel centerPanel = new JPanel(new GridLayout(0, 2));

        String[] titles = { "Introduction", "Class and Objects",
                "Object Oriented Programming Concepts",
                "JAVA literals, constants, variables", "Loops",
                "Functions/Methods", "Strings", "Arrays",
                "Time Complexity", "Data Structures" };
        rb = new JRadioButton[titles.length];
        group = new ButtonGroup();

        for (int i = 0; i < titles.length; i++) {
            rb[i] = new JRadioButton(titles[i]);
            group.add(rb[i]);
            centerPanel.add(rb[i]);
        }

        return centerPanel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new RadioButtonTest();
            }
        });
    }

}