电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

Swing 中设置模态窗体和启动位置


发布日期:2018/9/13
 

关于 Modal 窗体

在 Swing 中只有 JDialog 可以设置为 Modal 窗体其方法可以在构造函数(例如JDialog(Frame owner boolean modal))中传参数也可以用 setModal(boolean b) 方法设定这个方法是从 Dialog 类继承的

在 JFrame 类中无法通过如 JDialog 的方法设置 Modal 窗体在 CSDN 有朋友尝试通过在 windowDeiconified() 时 requestFocus() 来模拟 Modal 窗体代码如下


publicclassMyModalFrameextendsJFrameimplementsWindowListener{

privateJFrameframe=null;

privatebooleanmodal=false;

privateStringtitle=null;

publicMyModalFrame(){

this(nullfalse);

}

publicMyModalFrame(JFrameframe){

this(framefalse);

}

publicMyModalFrame(JFrameframebooleanmodal){

this(framemodal);

}

publicMyModalFrame(JFrameframebooleanmodalStringtitle){

super(title);

thisframe=frame;

thismodal=modal;

thistitle=title;

thisinit();

}

privatevoidinit(){

if(modal)

framesetEnabled(false);

thisaddWindowListener(this);

}

publicvoidwindowOpened(WindowEventwindowEvent){

}

publicvoidwindowClosing(WindowEventwindowEvent){

if(modal)

framesetEnabled(true);

}

publicvoidwindowClosed(WindowEventwindowEvent){

}

publicvoidwindowIconified(WindowEventwindowEvent){

}

publicvoidwindowDeiconified(WindowEventwindowEvent){

}

publicvoidwindowActivated(WindowEventwindowEvent){

}

publicvoidwindowDeactivated(WindowEventwindowEvent){

if(modal)

thisrequestFocus();

}

}
关于窗体启动位置

有时候想要让窗体启动后在屏幕中间启动有种比较复杂的方法

DimensionscreenSize=ToolkitgetDefaultToolkit()getScreenSize();

Dimensionsize=framegetSize();

intx=(screenSizewidthsizewidth)/;

inty=(screenSizeheightsizeheight)/;

framesetLocation(xy);
在 Java 版之后可以用一条语句代替

framesetLocationRelativeTo(null);

Java API 文档中对此方法描述如下public void setLocationRelativeTo(Component c)
设置此窗口相对于指定组件的位置如果此组件当前未显示或者 c 为 null则此窗口位于屏幕的中央如果该组件的底部在视线以外则将该窗口放置在 Component 最接近窗口中心的一侧因此如果 Component 在屏幕的右部则 Window 将被放置在左部反之亦然

在应用此方法时应该注意的一点是setSize() 方法一定要放在 setLocationRelativeTo() 之前否则只有窗体左上角是正对屏幕或所属组件中心整个窗体看起来会是偏向右下角的

上一篇:从JAR文件中读取文件

下一篇:链接到外部类