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. LCIS(最长公共上升子序列)模板

    求出LCIS并输出其路径. 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #inc ...

  2. Spring-cloud-netflix-hystrix

    服务注册中心eureka-server已经搭好,并且SPRING-CLOUD-NETFLIX-EUREKA-CLIENT-APPLICATION提供一个hello服务 畏怯还编写一个eureka-cl ...

  3. 进程控制——fork-and-exec、system、wait

    forc-and-exec流程 父进程与子进程之间的关系十分复杂,最大的复杂点在于进程间相互调用.Linux下这一流程称为fork-and-exec.父进程通过fork的方式产生一个一模一样的子进程, ...

  4. Linux内核实现透视---工作队列

    作为Linux中断低半部的另一种实现机制的基础,工作队列的出现更多的是为了解决软中断和Tasklet对于用户进程的时间片的不良影响问题的.工作队列本身是可以使用内核线程来替代的,但是使用线程来实现复杂 ...

  5. 018-019 NET5_内置容器支持依赖注入+IServiceCollection的生命周期

    概念: DI依赖注入: IServiceCollection仅支持构造函数注入 什么是依赖注入? 如果对象A依赖对象B,对象B依赖对象C,就可以先构造对象C,然后传递给对象B,再把对象B传递给A.得到 ...

  6. MOOC学习成果认证及对高等教育变革路径的影响

    MOOC是网络开放教育创新发展的产物,也是备受人们欢迎的网络学习途径.当前制约MOOC能否可持续深入发展的问题聚焦于MOOC学习成果能否得到合理的认证.MOOC学习成果认证分为非学分认证和学分认证.M ...

  7. js screen size check

    js screen size check js 屏幕尺寸检测 window.screen API screen; window.screen.width; window.screen.height; ...

  8. PyCharm 中文 字符 python 报错 的 完美 解决方案!

    PyCharm 中文 字符 python 报错 的 完美 解决方案! #_*_ coding:utf-8_*_ https://www.python.org/dev/peps/pep-0263/ 到p ...

  9. React 权限管理

    React 权限管理 react in depth JWT token access_token & refresh_token access token & refresh toke ...

  10. .bashrc & rename hostname & rename username

    .bashrc & rename hostname & rename username mbp $ pwd $ cd ~ $ pwd $ cat .bashrc $ vim .bash ...