对于自定义窗体来说,最简单直接的做法就是让新窗体继承javax.swing.JDialog(对话框属于顶级窗口,跟JFrame同级),在创建该窗体后加上setModalityType()就可实现打开新窗口后原窗口不能动作,关闭新窗口后方可动作的操作。
NewFrame nf = new NewFrame() // 继承JDialog的窗体类nf.setModalityType(Dialog.ModalityType.APPLICATION_MODAL) // 设置模式类型。
// 参数 APPLICATION_MODAL:阻塞同一 Java 应用程序中的所有顶层窗口(它自己的子层次
// 结构中的顶层窗口除外)。
nf.setVisible(true)
P.S.. setModalityType()只有JDialog类才有。
非要用JFrame类的话,目前可行的只有设置setEnable(false),效果一样。但对于多个自定义的窗体类不在同一个类文件中时操作起来相对不友好。需进行监听操作以‘唤醒’窗体。
JButton btn=new JButton(new AbstractAction("关闭并打开") { @Override public void actionPerformed(ActionEvent e) { oldFrame.dispose()// 关闭并销毁,无需销毁可采用oldFrame.setVisible(false) newFrame.setVisible(true)// 打开新窗口 }})import javax.swing.*
import java.awt.Rectangle
import java.awt.event.*
public class Swing7 extends JFrame implements ActionListener {
JButton jb = new JButton()
public Swing7() {
this.setTitle("Java——")
jb.setText("确定")
jb.setMnemonic('a')
this.add(jb)
this.setBounds(200, 300, 250, 300)
ctionListener就是Swing7实例。
}
public void actionPerformed(ActionEvent e) {// 实现ActionListener接口的actionPerformed接口。
JFrame frame = new JFrame("新窗口")//构造一个新的JFrame,作为新窗口。
frame.setBounds(// 让新窗口与Swing7窗口示例错开50像素。
new Rectangle(
(int) this.getBounds().getX() + 50,
(int) this.getBounds().getY() + 50,
(int) this.getBounds().getWidth(),
(int) this.getBounds().getHeight()
)
)
JLabel jl = new JLabel()// 注意类名别写错了。
frame.getContentPane().add(jl)
jl.setText("这是新窗口")
jl.setVerticalAlignment(JLabel.CENTER)
jl.setHorizontalAlignment(JLabel.CENTER)// 注意方法名别写错了。
frame.setVisible(true)
}
public static void main(String args[]) {
Swing7 s = new Swing7()
}
}
/*** 打开打印窗口
* url:链接页面或action动作
* Banglu
*/
function printWindow(url){
var sURL = url
var sFeatures = "toolbar=no, menubar=no, scrollbars=no,resizable=yes, "
+ "location=no, status=no, titlebar=no, width=800, height=600, top=100, left=100"
window.open(sURL,'notoolbar',sFeatures)
}function exportWindow(url){
var sURL = url
var sFeatures = "toolbar=no, menubar=no, scrollbars=no,resizable=yes, "
+ "location=no, status=no, titlebar=no, width=800, height=600, top=50, left=50"
var objwin=window.open(sURL,'export'+randomNum(),sFeatures)
objwin.close()
}
/**
* 打开模态窗口
* url:链接页面或action动作
* width:打开模态窗口的宽度
* height:打开模态窗口的高度
* 注意:打开模态窗口的页面中要在<head>后面加上
* <meta http-equiv="Pragma" content="no-cache">:禁止模态窗口缓存
* <base target="_self"/>:模态窗口中的表单在本窗口中提交
* <a onClick='window.location = "view-source:" + window.location.href'><b>源文件</b></a>可以查看模态窗口的源文件
* Banglu
*/
function modalWindow(url, width, height){
var sURL = url
var sFeatures = "dialogWidth:" + width + "pxdialogHeight:" + height + "px"
+ "help:noscroll:yescenter:yesstatus:noresizable:yes"
window.showModalDialog(sURL, window, sFeatures)
}/**
* 打开普通窗口
* url:链接页面或action动作
* width:宽度
* height:高度
* Banglu
*/
function openWindow(url, width, height){
var sURL=url
var sFeatures = "scrollbars=yes, status=yes, resizable=yes,"
+ "toolbar=yes, menubar=yes, location=yes, titlebar=yes"
if(width!=null){
sFeatures+=", width="+width
}
if(height!=null){
sFeatures+=", height="+height
}
window.open(sURL, 'open'+randomNum(), sFeatures)
}/**
* 打开窗口
* url:链接页面或action动作
* width:宽度
* height:高度
Banglu
*/
function openNoBarWindow(url, width, height){
var sURL=url
var sFeatures = "scrollbars=no, status=no, resizable=no,"
+ "toolbar=no, menubar=no, location=no, titlebar=no"
if(width!=null){
sFeatures+=", width="+width
sFeatures+=", left="+(screen.width-width)/2
}
if(height!=null){
sFeatures+=", height="+height
sFeatures+=", top="+(screen.height-height-100)/2
}
window.open(sURL, 'openNoBar'+randomNum(), sFeatures)
}
/**
* 打开全屏窗口
* url:链接页面或action动作
* Banglu
*/
function openFullWindow(url){
var sURL=url
var sFeatures = "toolbar=no, menubar=no, scrollbars=no, resizable=yes, "
+ "location=no, status=no, titlebar=no, width="+(screen.width-10)+", "
+ "height="+(screen.height-60)+", top=0, left=0"
window.open(sURL, 'full'+randomNum(), sFeatures)
}/**
* 打开主窗口
* url:链接页面或action动作
* Banglu
*/
function openMainWindow(url){
var sURL=url
var sFeatures = "toolbar=no, menubar=no, scrollbars=no, resizable=yes, "
+ "location=no, status=no,titlebar=no, width="+(screen.width-10)+", "
+ "height="+(screen.height-60)+", top=0, left=0"
window.open(sURL, 'main', sFeatures)
}
/**
* 设置链接
* url:连接的jsp页面或action动作
* Banglu
*/
function link(url, frameID){
if(frameID==null){
window.location.href = url
}
else{
window.frames[frameID].location = url
}
}/**
* 回车代替tab
* Banglu
*/
function handleKey(){
var gk = window.event.keyCode
if (gk==13) {
if(window.event.srcElement.tagName!='TEXTAREA'){
window.event.keyCode=9
return
}
}
}/**
* 全屏显示
* Banglu
*/
function fullScreen(){
window.dialogHeight=window.screen.availHeight
window.dialogWidth=window.screen.availWidth
}
function Resize_dialog(t,l,w,h) {
window.dialogTop = t+"px"
window.dialogLeft = l+"px"
window.dialogHeight = h+"px"
window.dialogWidth = w+"px"
}