英文:
I cannot see Radio buttons in Java Swing
问题
我有2个按钮和一个按钮组,但是我在应用程序窗口中看不到它们。普通按钮对我有效,但单选按钮却不行。我之前使用了普通按钮的教程,然后查看了如何创建单选按钮,但这种方法对我根本不起作用。
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");
}
}
我得到了一个空白的窗口,根本没有按钮。
英文:
I have 2 buttons and one button group for them, but I cannot see them in app window. Normal buttons work for me, but not the radio ones. I was using tutorial for normal buttons and then I have checked out how to do radio ones, but this method doesn't work for me at all.
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");
}
}
I have white window, no buttons at all.
答案1
得分: 4
以下是您要翻译的内容:
你还需要将单选按钮添加到面板中。仅将它们添加到按钮组是不够的。按钮组的唯一目的是确保在按钮组中只能选择一个单选按钮。
这是您更正过的代码。请注意,我只添加了两行。
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); // 添加了这一行
add(mode3DES); // 添加了这一行
}
@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。
英文:
You also need to add the radio buttons to the panel. Just adding them to the button group is not enough. The only purpose of the button group is to ensure that only one radio button in the button group can be selected.
Here is your corrected code. Note that I only added two lines.
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");
}
}
Note that I did not change the code of class MyFrame
. I only changed class RadioPanel
.
I recommend the [online] tutorial Creating a GUI With JFC/Swing
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论