Java Swing 自定義Dialog確認對話框
- 2021 年 3 月 9 日
- 筆記
- JAVA, Java Swing
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窗口撒事也不幹。