java - 如何在 Java Swing 中监听 JFrame 窗口从其父 JFrame 关闭

标签 java swing user-interface

我的程序从已运行的父 JFrame 启动 JFrame。除了一个条件之外,第二个 JFrame 具有独立于第一个 JFrame 的自主权 - 我要求当(且仅当)第二个 JFrame 打开时禁用父 JFrame 中的一个按钮,以防止启动其他 JFrame。

所以我的问题是,如何从父 JFrame 监听第二个 JFrame 的“存在​​”,以便操作我的按钮是否处于 Activity 状态?

我的父 JFrame 启动辅助 JFrame,如下所示:

try { 
    second_frame Jframe = new second_frame(variable);
    Jframe.second_frame.setVisible(true);
    } catch (Exception e) {
                e.printStackTrace();
    }

后跟:

btn_open.setEnabled(false);

启动第二个 JFrame 后禁用该按钮。

那么我现在如何从第一个 JFrame 监听第二个 JFrame 的窗口状态,以便重新启用 btn_open 按钮。

最佳答案

一种方法是添加 WindowListener到第二帧。每次框架关闭或打开时,您都可以调用 button.setEnabled()。 (有实现的方法)

这是一个例子:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Example {

    JButton button = new JButton("Open");

    public static void main(String args[]) {

        new Example();

    }

    public Example() {

        JFrame frame = new JFrame();

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                new secondFrame();

            }
        });

        frame.getContentPane().setLayout(new FlowLayout());
        frame.getContentPane().add(button);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setVisible(true);

    }

    class secondFrame extends JFrame implements WindowListener {

        public secondFrame() {

            setSize(200, 200);
            setVisible(true);

            addWindowListener(this);

        }

        @Override
        public void windowActivated(WindowEvent arg0) {

        }

        @Override
        public void windowClosed(WindowEvent arg0) {

        }

        @Override
        public void windowClosing(WindowEvent arg0) {

            button.setEnabled(true);

        }

        @Override
        public void windowDeactivated(WindowEvent arg0) {

        }

        @Override
        public void windowDeiconified(WindowEvent arg0) {

        }

        @Override
        public void windowIconified(WindowEvent arg0) {

        }

        @Override
        public void windowOpened(WindowEvent arg0) {

            button.setEnabled(false);

        }

    }

}

关于java - 如何在 Java Swing 中监听 JFrame 窗口从其父 JFrame 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32379857/

相关文章:

java - POI excel 转换为二维数组

java - 如何在 Lucene 搜索中匹配精确文本?

Java Swing : JScrollPane not working

Python - GUI2EXE - 属性错误 : 'module' object has no attribute 'Popen'

python - 将单选按钮的输入获取到变量 [Tkinter]

java - 后端模块需要来自表示层的 URL - 如何避免循环依赖?

java - 带有Gradle的Intellij中的调试器配置

java - 如何在swing中自由布局动态添加按钮等组件?

java - 使用 value 生成 jpanels 并将其添加到水平组布局

javascript - 页面内容中的 HTML Iframe