另一个类中的Java actionListener不会打开窗口

标签 java swing awt actionlistener

我是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/

相关文章:

java - Java 1.8 中无法正确显示 Swing 应用程序菜单名称

java - 尝试在空对象引用上调用虚拟方法 'java.lang.String java.lang.Integer.toString()'

java if long 不起作用

java - 如何为 JTextArea 设置全宽?

java - 创建按钮 GUI 面板

java - CardLayout .show() 方法不起作用

java - 旋转 BufferedImage 并删除黑色边界

JavaME(PBP): How do I rotate text?

java - 我的应用程序使用 AWT,尽管其构建的 jar 使用 Swing。为什么?

javascript - 如何使 HtmlUnit 的 WebClient 加速执行由 window.setTimeout 触发的 javascript?