Java Swing—将所有JFrame保持在一起
我有一个应用程序,其中有时我使用“模态”,更小的窗口。为了模拟这种模式行为,我将它们定义为JFrames的扩展,禁用主应用程序框架,并将默认的close操作设置为nothing。问题是JFrame不能有父应用程序,因此,当用户单击据说要关闭窗口的按钮时,它实际上会关闭,系统会返回到上次使用的应用程序,这并不总是理想的效果(例如,用户打开模式窗口,然后他/她将Alt+选项卡切换到另一个应用程序,然后切换回模式窗口并关闭它,结果显示的是最后一个应用程序,而不是我的主框架)。有没有办法做到这一点(将JFrame绑定到父级或类似的东西…?)。请注意,JOptionPane不是一个选项,因为这些较小的窗口需要在每个窗口中包含20个不同的自定义组件。为什么不使用Java Swing—将所有JFrame保持在一起,java,swing,jframe,Java,Swing,Jframe,我有一个应用程序,其中有时我使用“模态”,更小的窗口。为了模拟这种模式行为,我将它们定义为JFrames的扩展,禁用主应用程序框架,并将默认的close操作设置为nothing。问题是JFrame不能有父应用程序,因此,当用户单击据说要关闭窗口的按钮时,它实际上会关闭,系统会返回到上次使用的应用程序,这并不总是理想的效果(例如,用户打开模式窗口,然后他/她将Alt+选项卡切换到另一个应用程序,然后切换回模式窗口并关闭它,结果显示的是最后一个应用程序,而不是我的主框架)。有没有办法做到这一点(将J
JDialog
?:-)您可以将JFrame参数添加到构造函数中,并在内部将其保存为父窗口,然后在父窗口的列表中保存子窗口的引用。然后可以重写dispose方法,并在关闭窗口之前关闭所有子级/父级
例如:
public class ParentWindow extends JFrame {
//Here you add children when you create them
List<JFrame> children = new ArrayList<JFrame>();
@Override
public void dispose() {
for(JFrame f : children) {
f.dispose();
}
super.dispose();
}
public void randomMethod() {
JFrame newWindow = new JFrame(this);
children.add(newWindow);
}
}
public class ChildWindow extends JFrame {
//Here you save the parent window
JFrame parent;
public ChildWindow(JFrame parent) {
this.parent = parent;
}
@Override
public void dispose() {
parent.dispose();
super.dispose();
}
}
公共类父窗口扩展JFrame{
//在这里,您可以在创建子对象时添加它们
List children=new ArrayList();
@凌驾
公共空间处置(){
用于(JF框架:儿童){
f、 处置();
}
super.dispose();
}
公共方法(){
JFrame newWindow=新JFrame(此);
添加(新窗口);
}
}
公共类ChildWindow扩展了JFrame{
//在这里保存父窗口
JFrame父代;
公共子窗口(JFrame父窗口){
this.parent=parent;
}
@凌驾
公共空间处置(){
parent.dispose();
super.dispose();
}
}
为什么不选择JDesktopPane
??您可以在这里了解如何使用它:看起来是一个不错的选择,但是JDialog似乎更容易使用,因为JDesktopPane是JFrame的容器,因此我仍然需要JFrame,但是JDialog允许我简单地将“extendsjframe”替换为“extendsjdialog”。无论如何,请投票,因为我从未听说过这个类,而且看起来很有用。JDesktopPane
是JInternalFrame
的容器,而不是JFrame
。啊,是的,很抱歉我错了,所以JDesktopPane可以用作设置JFrame的contentpane的参数,这就是你建议的方式,不是吗?谢谢另见