我试过这个
public void windowActivated(WindowEvent we) {
frame1.setVisible(true);
frame.setVisible(true);
}
public void windowDeactivated(WindowEvent we) {
frame1.setVisible(false);
frame2.setVisible(false);
}`
但这不起作用。我的所有Windows都开始闪烁。我不能将JFrame2设置为不可聚焦。
还有其他办法吗?
答案 0 :(得分:2)
使用非模态对话框,默认情况下会对问题进行排序。
import javax.swing.*;
class TestDialogMinimize {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
JFrame f = new JFrame("Has a Dialog");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,400);
JDialog d = new JDialog(f);
d.setSize(200,200);
f.setVisible(true);
d.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
答案 1 :(得分:1)
this answer中的非模态对话建议是一种方法。另请参阅this answer elsewhere。
如果由于某种原因你需要继续使用框架,你可以用
缩小它们frame1.setState(Frame.ICONIFIED)
并用
提升它们frame1.setState(Frame.NORMAL)
在代码块中处理这些:
frame0.addWindowStateListener(new WindowStateListener() {
@Override
public void windowStateChanged(WindowEvent e) {
// handle change
}
});
如果要在关闭frame0时关闭所有帧,可以使用:
frame0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
退出程序并在关闭frame0时关闭所有帧。如果你只是隐藏在近距离使用窗口监听器。您可以在frame1.setVisible(false)
中使用WindowListener
。