我是java新手,我想制作一个带有3个单选按钮的简单程序,一次只选择一个按钮。 我在同一个类中使用 actionListener 制作了相同的程序并且它有效,但是当我将 actionListener 移动到不同的类中时,我陷入了困境。
这是我创建窗口的类:
import javax.swing.JRadioButton;
import javax.swing.JFrame;
import java.awt.FlowLayout;;
public class window extends JFrame{
public JRadioButton radio1= new JRadioButton("Salam1");
public JRadioButton radio2= new JRadioButton("Salam2");
public JRadioButton radio3= new JRadioButton("Salam3");
public window(){
super("Title");
setLayout(new FlowLayout());
add(radio1);
add(radio2);
add(radio3);
action acc = new action();
radio1.addActionListener(acc);
radio2.addActionListener(acc);
radio3.addActionListener(acc);
}
}
这是我的 ActionListener 类:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class action implements ActionListener{
window sarma = new window();
public void actionPerformed(ActionEvent event){
if(sarma.radio1.isSelected()){
sarma.radio2.setSelected(false);
sarma.radio3.setSelected(false);
}
if(sarma.radio2.isSelected()){
sarma.radio1.setSelected(false);
sarma.radio3.setSelected(false);
}
if(sarma.radio3.isSelected()){
sarma.radio2.setSelected(false);
sarma.radio1.setSelected(false);
}
}
}
主类
import javax.swing.JFrame;
public class first{
public static void main(String args[]) {
window salam = new window();
salam.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
salam.setSize(500,150);
salam.setResizable(false);
salam.setVisible(true);
}
}
在操作类中创建窗口对象(名为 sarma)后,当我尝试运行程序时,窗口不会打开。 那么,我怎样才能让这个程序运行呢?
最佳答案
代码当前的问题在于操作监听器没有对原始窗口的引用,而是创建了一个从未设置为可见的完全独立的实例。 (如 D.G 所详述)。
但是不需要 Action 监听器。可以使用 ButtonGroup
来实现效果,如下所示:
import javax.swing.*;
import java.awt.*;
public class RadioButtonWindow extends JFrame{
public JRadioButton radio1= new JRadioButton("Salam1");
public JRadioButton radio2= new JRadioButton("Salam2");
public JRadioButton radio3= new JRadioButton("Salam3");
public RadioButtonWindow(){
super("Title");
setLayout(new FlowLayout());
add(radio1);
add(radio2);
add(radio3);
// Only one button in this group can be selected at a time!
ButtonGroup bg = new ButtonGroup();
bg.add(radio1);
bg.add(radio2);
bg.add(radio3);
}
public static void main(String args[]) {
RadioButtonWindow salam = new RadioButtonWindow ();
salam.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Wrong way to size a GUI!
//salam.setSize(500,150);
salam.setResizable(false);
// Correct way to size a GUI
salam.pack();
salam.setVisible(true);
}
}
关于另一个类中的Java actionListener不会打开窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54039847/