Java Swing 自定义Dialog

  • 需求:当点击JFrame窗口的关闭按钮时,弹框询问是否确定关闭窗口,如果是则关闭程序,否就让弹框消失什么也不做(使用Dialog)。
  • 分析:虽然Java提供了 JOptionPane 类,用来创建标准对话框,但是此处需要使用Dialog来提供弹框。所以可以通过扩展 JDialog 类创建自定义的对话框。

    实现如下:
package com.tianjh.dialog;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /**
* @author tianjh
* @date 2021/3/8
* 当点击JFrame窗口的关闭按钮时,触发窗口监听事件
* 弹框询问是否真的需要关闭程序
*/
public class MyDialog extends JFrame {
JPanel jPanel;
static final String TITLE = "提示";
static final String CONTENT = "确定要关闭JFrame窗口吗?"; public MyDialog() {
jPanel = new JPanel();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
new CustomDialog(TITLE, CONTENT).setVisible(true);
}
});
JButton jButton = new JButton("点我或关闭按钮看看效果");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new CustomDialog(TITLE, CONTENT).setVisible(true);
}
});
jPanel.add(jButton,BorderLayout.CENTER);
add(jPanel);
setTitle("JFrame窗口");
setSize(500, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setVisible(true);
} public static void main(String[] args) {
new MyDialog();
} } /**
* 自定义Dialog对话框
*/
class CustomDialog extends JDialog implements ActionListener {
String title;
String content;
String ok = "确定";
String cancel = "取消"; public CustomDialog(String title, String content) {
this.title = title;
this.content = content;
int width = 45, height = 45;
// 创建1个图标实例,注意image目录要与src同级
ImageIcon icon = new ImageIcon("image//tu.png");
icon.setImage(icon.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
// 1个图片标签,显示图片
JLabel jlImg = new JLabel(icon);
jlImg.setSize(width, height);
jlImg.setBounds(20, 44, width, height);
// 1个文字标签,显示文本
JLabel jLabel = new JLabel(content);
jLabel.setFont(new Font("", Font.PLAIN, 14));
// 设置文字的颜色为蓝色
jLabel.setForeground(Color.black);
jLabel.setBounds(75, 43, 180, 45);
JButton okBut = new JButton(ok);
JButton cancelBut = new JButton(cancel);
okBut.setBackground(Color.LIGHT_GRAY);
okBut.setBorderPainted(false);
okBut.setBounds(65, 126, 98, 31);
cancelBut.setBounds(175, 126, 98, 31);
cancelBut.setBackground(Color.LIGHT_GRAY);
cancelBut.setBorderPainted(false);
// 给按钮添加响应事件
okBut.addActionListener(this);
cancelBut.addActionListener(this);
// 向对话框中加入各组件
add(jlImg);
add(jLabel);
add(okBut);
add(cancelBut);
// 对话框流式布局
setLayout(null);
// 窗口左上角的小图标
setIconImage(icon.getImage());
// 设置标题
setTitle(title);
// 设置为模态窗口,此时不能操作父窗口
setModal(true);
// 设置对话框大小
setSize(300, 210);
// 对话框局域屏幕中央
setLocationRelativeTo(null);
// 对话框不可缩放
setResizable(false);
// 点击对话框关闭按钮时,销毁对话框
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
} /**
* 当按钮被点击时会执行下面的方法
*
* @param e 事件
*/
@Override
public void actionPerformed(ActionEvent e) {
// 判断是不是确定按钮被点击
if (ok.equals(e.getActionCommand())) {
// 对话框不可见
this.setVisible(false);
System.out.println("我退出程序了...");
System.exit(0);
}
if (cancel.equals(e.getActionCommand())) {
this.setVisible(false);
this.dispose();
System.out.println("我啥也没干...");
}
}
}
  • JFrame界面如下所示:

  • 点击JFrame窗口中的按钮或者关闭按钮即可触发确认对话框,点击之后的结果如下:

  • 如果点击确定,则退出该程序,否则退回到Jframe窗口撒事也不干。

Java Swing 自定义Dialog确认对话框的更多相关文章

  1. Android中制作自定义dialog对话框的实例

    http://www.jb51.net/article/83319.htm   这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...

  2. Dialog详解(包括进度条、PopupWindow、自定义view、自定义样式的对话框)

    Dialog详解(包括进度条.PopupWindow.自定义view.自定义样式的对话框)   Android中提供了多种对话框,在实际应用中我们可能会需要修改这些已有的对话框.本实例就是从实际出发, ...

  3. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  4. Android FlycoDialog 简单实用的自定义Android弹窗对话框之Dialog篇

    效果图镇楼   FlycoDialog是一款非常棒的弹窗对话框处理框架,今天在这里主要讲一下他的自定义弹出对话框的功能,这里以第二幅效果图为例,图片已经放在博客最下方,X号自己随便找一个东西代替吧.  ...

  5. Java Swing提供的文件选择对话框 - JFileChooser

    JFileChooser()           构造一个指向用户默认目录的 JFileChooser. JFileChooser(File currentDirectory)           使 ...

  6. Android自定义 Dialog 对话框

    Android自定义Dialoghttp://www.cnblogs.com/and_he/archive/2011/09/16/2178716.html Android使用自定义AlertDialo ...

  7. swing自定义JDialog弹出框

    第一次搞swing,自定义JDialog的例子较少,写下来备忘 ,对JDialog中的文本框进行了验证 package com.chauvet; import java.awt.Component; ...

  8. java swing JDialog 和 java.util.concurrent的使用

    参考链接: Java-Swing的JFrame的一些插件使用详解 java swing JDialog 使用 ScheduledExecutorService定时周期执行指定的任务 swing JDi ...

  9. Android—自定义Dialog

    在 Android 日常的开发中,Dialog 使用是比较广泛的.无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框. 而我们去看一下原生的对话框,虽然随着 ...

随机推荐

  1. 洛谷 P1629 邮递员送信-反向建边

    洛谷 P1629 邮递员送信 题目描述: 有一个邮递员要送东西,邮局在节点 11.他总共要送 n-1n−1 样东西,其目的地分别是节点 22 到节点 nn.由于这个城市的交通比较繁忙,因此所有的道路都 ...

  2. Kubernets二进制安装(16)之安装部署traefik(ingress)

    K8S的DNS实现了服务在集群"内"被自动发现,如何使得服务在Kuberneters集群"外"被使用和访问呢,有二种方法 1)使用NodePort型的Servi ...

  3. OpenStack Train版-2.安装keystone身份认证服务

    安装 keystone 认证 mysql -uroot create database keystone; grant all privileges on keystone.* to 'keyston ...

  4. XCTF攻防世界web进阶练习—mfw

    XCTF攻防世界web进阶练习-mfw题目为mfw,没有任何提示.直接打开题目,是一个网站 大概浏览一下其中的内容,看到其中url变化其实只是get的参数的变化查看它的源码,看到有一个?page=fl ...

  5. apache 解析漏洞(CVE-2017-15715)

    在p牛博客最近更新的文章,传送门,感觉很有意思,自己在自己本地测试了一下 0x01 正则表达式中的 '$' apache这次解析漏洞的根本原因就是这个 $,正则表达式中,我们都知道$用来匹配字符串结尾 ...

  6. HBuilderX All In One

    HBuilderX All In One uni-app https://uniapp.dcloud.io/quickstart-hx 目录结构 一个uni-app工程,默认包含如下目录及文件: $ ...

  7. sentry.event & UnhandledRejection & promise rejection

    sentry.event & UnhandledRejection & promise rejection Non-Error promise rejection captured s ...

  8. MathJax TeX & LaTeX

    MathJax TeX & LaTeX mathcal https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-z ...

  9. O² & O₂

    O² & O₂ special symbol O² & O₂ HTML HTML subscript and superscript Tags HTML 下标元素 HTML 上标元素 ...

  10. SVG Tutorials

    SVG Tutorials W3C https://www.w3.org/TR/SVG11/ https://www.w3.org/TR/SVG2/ https://www.w3.org/TR/svg ...