Java 另一个 class 中的 actionListener 不会打开 window

Java actionListener in another class won't open the window

我是 java 的新手,我想用 3 个单选按钮制作一个简单的程序,一次只选择一个按钮。 我用相同的 class 中的 actionListener 创建了相同的程序并且它有效,但是当我将 actionListener 移动到不同的 class 时我卡住了。

这是我创建 window 的 class:

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 Class:

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

主要class

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

在 class 操作中创建 window 对象(名为 sarma)后,当我尝试 运行 程序时,window 无法打开。 那么,我怎样才能让这个程序工作呢?

代码的当前问题归结为以下事实:动作侦听器没有引用原始 window,而是创建了一个永远不可见的完全独立的实例。 (详见 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);
    }
}