我的程序从已运行的父 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/