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



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

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

我有白色的窗户,根本没有按钮。

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

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

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

请注意,我没有更改类MyFrame的代码。我只换了RadioPanel班。

我推荐[在线]教程使用JFC/Swing 创建GUI

最新更新