我在 Java Swing 中看不到单选按钮

I cannot see Radio buttons in Java Swing

我有 2 个按钮和一个按钮组,但我在应用程序中看不到它们 window。普通按钮对我有用,但对收音机按钮不起作用。我正在使用普通按钮的教程,然后我检查了如何做单选按钮,但这种方法对我根本不起作用。

MyFrame.java

package com.company;

import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame {

    public MyFrame() {
        super("DES");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setSize(800,600);
        setLocationRelativeTo(null);
        setLayout(new FlowLayout());

        //add(new JButton("Przycisk 1"));
        //add(new JButton("Przycisk 2"));
        //add(new JButton("Przycisk 3"));

        //JPanel buttonPanel = new ButtonPanel();
        //add(buttonPanel);

        JPanel radioPanel = new RadioPanel();
        add(radioPanel);

        setVisible(true);
    }
}

RadioPanel.java

package com.company;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class RadioPanel extends JPanel implements ActionListener{

    private JRadioButton modeDES;
    private JRadioButton mode3DES;

    public RadioPanel() {
        modeDES = new JRadioButton("DES");
        modeDES.setSelected(true);

        mode3DES = new JRadioButton("3DES");

        ButtonGroup desMode = new ButtonGroup();
        desMode.add(modeDES);
        desMode.add(mode3DES);
        modeDES.addActionListener(this);
        mode3DES.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();

        if(source == modeDES)
            System.out.println("DES");

        else if(source == mode3DES)
            System.out.println("3DES");
    }
}

我有白色window,根本没有按钮。

您还需要将单选按钮添加到面板。仅仅将它们添加到按钮组是不够的。按钮组的唯一目的是确保按钮组中只能选择一个单选按钮。

这是您更正后的代码。请注意,我只添加了两行。

package com.company;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class RadioPanel extends JPanel implements ActionListener{

    private JRadioButton modeDES;
    private JRadioButton mode3DES;

    public RadioPanel() {
        modeDES = new JRadioButton("DES");
        modeDES.setSelected(true);

        mode3DES = new JRadioButton("3DES");

        ButtonGroup desMode = new ButtonGroup();
        desMode.add(modeDES);
        desMode.add(mode3DES);
        modeDES.addActionListener(this);
        mode3DES.addActionListener(this);
        add(modeDES); // added this line
        add(mode3DES); // added this line
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();

        if(source == modeDES)
            System.out.println("DES");

        else if(source == mode3DES)
            System.out.println("3DES");
    }
}

请注意,我没有更改 class MyFrame 的代码。我只改了 class RadioPanel.

我推荐[在线]教程Creating a GUI With JFC/Swing