Swing 弹窗子窗体后,父窗体不可点击,怎么实现

 我来答
雪飞潇潇
2018-12-02 · TA获得超过6275个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:867万
展开全部

父窗体不可点击,即模态窗口. Swing弹出(模态)窗口, 有两种方案可以实现

第一:JOptionPane 来弹出窗口

优点: 实现简单, 可以来弹出简单的提示信息等..

缺点:自由度不高,复杂的窗体难实现

第二:JDialong 来弹出窗口

 jdialong.setModal(true);//设置为模态窗口,父窗口就不可点击了

优点: 自由度高, 可以实现很复杂的弹窗

缺点:代码量稍微较多

参考代码和注释如下

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
//Java8版本测试通过

//DemoFrame 继承自 JFrame
public class DemoFrame extends JFrame{

JButton jb1,jb2;// 1个按钮

public DemoFrame() {

jb1 = new JButton("弹窗一"); 
jb2 = new JButton("弹窗二"); 
JPanel jp = new JPanel(); //创建面板
jp.add(jb1);jp.add(jb2);
this.add(jp);//把面板添加到窗口

//弹窗1
jb1.addActionListener(e->{
JOptionPane.showMessageDialog(this, "利用JOptionPane弹窗简单窗口", "弹窗1", JOptionPane.INFORMATION_MESSAGE);
});

//弹窗2
MyDialog md=new MyDialog(this);
jb2.addActionListener(e->{
md.setVisible(true);
});

//窗体部分的设置
setTitle("父窗口");//设置标题
setSize(320, 300); // 设置窗口大小
setLocationRelativeTo(null); //设置窗口在屏幕的中央
setDefaultCloseOperation(EXIT_ON_CLOSE);//点击关闭按钮时退出
}

//main方法
public static void main(String[] args) {
EventQueue.invokeLater(()->new DemoFrame().setVisible(true));//创建窗口并设置可见
}
}

//自定义弹出窗口类
class MyDialog extends JDialog{
public MyDialog(DemoFrame frame) {
super(frame);//给弹窗指定父窗口this
setTitle("弹窗2"); 
setModal(true);//!!! 设置为模态窗口,父窗口不能被点击
setSize(170,92);
setLocationRelativeTo(null);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);//点击关闭按钮时销毁弹窗

//JDialog作为弹窗 有很大的自由度, 可以像JFrame一样添加各种组件
JLabel jl = new JLabel("利用JDialog 来作为弹窗");
add(jl);
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式