我是Java的新手,我想制作一个具有3个radioButtons的简单程序,一次仅选择一个按钮。 我在同一类中使用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)后,尝试运行程序时窗口不会打开。 那么,如何使该程序正常工作?
答案 0 :(得分:1)
当前的代码问题归结为以下事实:动作侦听器没有对原始窗口的引用,而是创建了一个完全独立的实例,该实例从未设置为可见。 (如D.G所述)。
但是不需要动作监听器。可以使用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);
}
}