1. 程式人生 > >JavaSwing_4.2: JDialog(對話方塊)

JavaSwing_4.2: JDialog(對話方塊)

1. 概述

官方JavaDocsApi:

JDialog,對話方塊。使用 JDialog 類可以建立自定義有的對話方塊,或者呼叫 JOptionPane 中的多個靜態方法快速建立各種標準的對話方塊。

JOptionPane是 JavaSwing 內部已實現好的,以靜態方法的形式提供呼叫,能夠快速方便的彈出要求使用者提供值或向其發出通知的標準對話方塊。

JOptionPane 提供的 標準對話方塊 型別分為以下幾種:

方法名 描述
showMessageDialog 訊息對話方塊,向用戶展示一個訊息,沒有返回值。
showConfirmDialog 確認對話方塊,詢問一個問題是否執行。
showInputDialog 輸入對話方塊,要求使用者提供某些輸入。
showOptionDialog 選項對話方塊,上述三項的大統一,自定義按鈕文字,詢問使用者需要點選哪個按鈕。

這些標準對話方塊的基本外形佈局通常如下圖所示:

dialog.png

上述四個型別的方法(包括其若干過載)的引數遵循一致的模式,下面介紹各引數的含義:

(1) parentComponent: 對話方塊的父級元件,決定對話方塊顯示的位置,對話方塊的顯示會盡量緊靠元件的中心,如果傳 null,則顯示在螢幕的中心。

(2) title: 對話方塊標題。

(3) message

: 訊息內容。

(4) messageType: 訊息型別,主要是提供預設的對話方塊圖示。可能的值為:

  • JOptionPane.PLAIN_MESSAGE 簡單訊息(不使用圖示)
  • JOptionPane.INFORMATION_MESSAGE 資訊訊息(預設)
  • JOptionPane.QUESTION_MESSAGE 問題訊息
  • JOptionPane.WARNING_MESSAGE 警告訊息
  • JOptionPane.ERROR_MESSAGE 錯誤訊息

(5) icon: 自定義的對話方塊圖示,如果傳 null,則圖示型別由 messageType 決定。

(6) optionType

: 選項按鈕的型別。

(7) options、initialValue: 自定義的選項按鈕(如果穿 null,則選項按鈕由 optionType 決定),以及預設選中的選項按鈕。

(8) selectionValues、initialSelectionValue: 提供的輸入選項,以及預設選中的選項。

下面是 JOptionPane 類中各標準對話方塊的靜態方法過載:

訊息對話方塊:

static void showMessageDialog(Component parentComponent, 
                              Object message)

static void showMessageDialog(Component parentComponent, 
                              Object message, 
                              String title, 
                              int messageType)

static void showMessageDialog(Component parentComponent, 
                              Object message, 
                              String title, 
                              int messageType, 
                              Icon icon)

確認對話方塊:

static int showConfirmDialog(Component parentComponent, 
                             Object message)

static int showConfirmDialog(Component parentComponent, 
                             Object message, 
                             String title, 
                             int optionType)

static int showConfirmDialog(Component parentComponent, 
                             Object message, 
                             String title, 
                             int optionType, 
                             int messageType)

static int showConfirmDialog(Component parentComponent, 
                             Object message, 
                             String title, 
                             int optionType, 
                             int messageType, 
                             Icon icon)

輸入對話方塊:

static String showInputDialog(Component parentComponent, 
                              Object message)

static String showInputDialog(Component parentComponent, 
                              Object message, 
                              Object initialSelectionValue)

static String showInputDialog(Component parentComponent, 
                              Object message, 
                              String title, 
                              int messageType)

static Object showInputDialog(Component parentComponent, 
                              Object message, 
                              String title, 
                              int messageType, 
                              Icon icon, 
                              Object[] selectionValues, 
                              Object initialSelectionValue)

選項對話方塊:

static int showOptionDialog(Component parentComponent, 
                            Object message, 
                            String title, 
                            int optionType, 
                            int messageType, 
                            Icon icon, 
                            Object[] options, 
                            Object initialValue)

2. 程式碼例項: 標準對話方塊的顯示(JOptionPane)

package com.xiets.swing;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

    public static void main(String[] args) throws Exception {
        final JFrame jf = new JFrame("測試視窗");
        jf.setSize(400, 400);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        /*
         * 1. 訊息對話方塊(資訊訊息)
         */
        JButton btn01 = new JButton("showMessageDialog(資訊訊息)");
        btn01.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 訊息對話方塊無返回, 僅做通知作用
                JOptionPane.showMessageDialog(
                        jf,
                        "Hello Information Message",
                        "訊息標題",
                        JOptionPane.INFORMATION_MESSAGE
                );
            }
        });

        /*
         * 2. 訊息對話方塊(警告訊息)
         */
        JButton btn02 = new JButton("showMessageDialog(警告訊息)");
        btn02.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 訊息對話方塊無返回, 僅做通知作用
                JOptionPane.showMessageDialog(
                        jf,
                        "Hello Warning Message",
                        "訊息標題",
                        JOptionPane.WARNING_MESSAGE
                );
            }
        });

        /*
         * 3. 確認對話方塊
         */
        JButton btn03 = new JButton("showConfirmDialog");
        btn03.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                /*
                 * 返回使用者點選的選項, 值為下面三者之一:
                 *     是:   JOptionPane.YES_OPTION
                 *     否:   JOptionPane.NO_OPTION
                 *     取消: JOptionPane.CANCEL_OPTION
                 *     關閉: JOptionPane.CLOSED_OPTION
                 */
                int result = JOptionPane.showConfirmDialog(
                        jf,
                        "確認刪除?",
                        "提示",
                        JOptionPane.YES_NO_CANCEL_OPTION
                );
                System.out.println("選擇結果: " + result);
            }
        });

        /*
         * 4. 輸入對話方塊(文字框輸入)
         */
        JButton btn04 = new JButton("showInputDialog(文字框輸入)");
        btn04.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 顯示輸入對話方塊, 返回輸入的內容
                String inputContent = JOptionPane.showInputDialog(
                        jf,
                        "輸入你的名字:",
                        "預設內容"
                );
                System.out.println("輸入的內容: " + inputContent);
            }
        });

        /*
         * 5. 輸入對話方塊(下拉框選擇)
         */
        JButton btn05 = new JButton("showInputDialog(下拉框選擇)");
        btn05.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Object[] selectionValues = new Object[]{"香蕉", "雪梨", "蘋果"};

                // 顯示輸入對話方塊, 返回選擇的內容, 點選取消或關閉, 則返回null
                Object inputContent = JOptionPane.showInputDialog(
                        jf,
                        "選擇一項: ",
                        "標題",
                        JOptionPane.PLAIN_MESSAGE,
                        null,
                        selectionValues,
                        selectionValues[0]
                );
                System.out.println("輸入的內容: " + inputContent);
            }
        });

        /*
         * 6. 選項對話方塊
         */
        JButton btn06 = new JButton("showOptionDialog");
        btn06.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 選項按鈕
                Object[] options = new Object[]{"香蕉", "雪梨", "蘋果"};

                // 顯示選項對話方塊, 返回選擇的選項索引, 點選關閉按鈕返回-1
                int optionSelected = JOptionPane.showOptionDialog(
                        jf,
                        "請點選一個按鈕選擇一項",
                        "對話方塊標題",
                        JOptionPane.YES_NO_CANCEL_OPTION,
                        JOptionPane.ERROR_MESSAGE,
                        null,
                        options,    // 如果傳null, 則按鈕為 optionType 型別所表示的按鈕(也就是確認對話方塊)
                        options[0]
                );

                if (optionSelected >= 0) {
                    System.out.println("點選的按鈕: " + options[optionSelected]);
                }
            }
        });

        // 垂直排列按鈕
        Box vBox = Box.createVerticalBox();
        vBox.add(btn01);
        vBox.add(btn02);
        vBox.add(btn03);
        vBox.add(btn04);
        vBox.add(btn05);
        vBox.add(btn06);

        JPanel panel = new JPanel();
        panel.add(vBox);

        jf.setContentPane(panel);
        jf.setVisible(true);
    }

}

result01.gif

3. 程式碼例項: 自定義對話方塊的顯示(JDialog)

對話方塊 JDialog 和 JFrame 都是繼承自 java.awt.Window,用法與 JFrame 類似。

對話方塊分為 模態 和 非模態:

  • 模態: 彈出對話方塊後,對話方塊的父級視窗不可操作。
  • 非模態: 彈出對話方塊後,對話方塊的父級視窗可以正常操作。

對話方塊不能最小化。

package com.xiets.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

    public static void main(String[] args) throws Exception {
        final JFrame jf = new JFrame("測試視窗");
        jf.setSize(300, 300);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JButton btn = new JButton("顯示自定義對話方塊");
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                showCustomDialog(jf, jf);
            }
        });

        JPanel panel = new JPanel();
        panel.add(btn);

        jf.setContentPane(panel);
        jf.setVisible(true);
    }

    /**
     * 顯示一個自定義的對話方塊
     *
     * @param owner 對話方塊的擁有者
     * @param parentComponent 對話方塊的父級元件
     */
    private static void showCustomDialog(Frame owner, Component parentComponent) {
        // 建立一個模態對話方塊
        final JDialog dialog = new JDialog(owner, "提示", true);
        // 設定對話方塊的寬高
        dialog.setSize(250, 150);
        // 設定對話方塊大小不可改變
        dialog.setResizable(false);
        // 設定對話方塊相對顯示的位置
        dialog.setLocationRelativeTo(parentComponent);

        // 建立一個標籤顯示訊息內容
        JLabel messageLabel = new JLabel("對話方塊訊息內容");

        // 建立一個按鈕用於關閉對話方塊
        JButton okBtn = new JButton("確定");
        okBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 關閉對話方塊
                dialog.dispose();
            }
        });

        // 建立對話方塊的內容面板, 在面板內可以根據自己的需要新增任何元件並做任意是佈局
        JPanel panel = new JPanel();

        // 新增元件到面板
        panel.add(messageLabel);
        panel.add(okBtn);

        // 設定對話方塊的內容面板
        dialog.setContentPane(panel);
        // 顯示對話方塊
        dialog.setVisible(true);
    }

}

result02.gif

相關推薦

JavaSwing_4.2: JDialog對話方塊

1. 概述 官方JavaDocsApi: JDialog,對話方塊。使用 JDialog 類可以建立自定義有的對話方塊,或者呼叫 JOptionPane 中的多個靜態方法快速建立各種標準的對話方塊。 JOptionPane是 JavaSw

第一個關於控制元件的例項對話方塊

1.先設定背景聊天檔案的圖片 資源管理器中找到安裝檔案下的tools->draw9patch.bat的檔案,雙擊可以執行,在裡面開啟將背景圖片加入編輯,並儲存替換原來的圖片 2.設定依賴庫 在app/build.gradle中新增依賴庫(目的為了使用recyclerview這個控制元件) dep

element-ui和vue表單對話方塊驗證提示語(殘留)清除

問題是這樣的: 如果一個頁面有多個按鈕開啟相同的element-ui的Dialog對話方塊,那麼如果第一個點選"順序"按鈕出現紅色驗證提示語後, 再點選“取消”,或者點選頁面空白處此對話方塊消失,而後再點選同一個“順序”按鈕亦或別的“順序”按鈕, 那麼此紅色提示依然存在,顯

MUI-dialog對話方塊,警告框、確認框、輸入對話方塊、訊息提示框

本文主要講述dialog(對話方塊),包括:警告框、確認框、輸入對話方塊、訊息提示框四類。 元件名 作用 alert 警告框 confirm 確認框

android 帶EditView編輯框的AlertDialog對話方塊及獲取輸入內容

首先在XML中設定一個Button來控制彈出框(AlertDialog) <Button android:layout_width="wrap_content" android:layout_height="wrap_

wex5頁面互動三種方式對話方塊

1、justep.shell 2、windowdialog 3、windowcontainer 備註:justep.shell關閉視窗需要用:justep.shell.closepage 程式碼如下: //-----------Shell.sh

解決在BroadcastReceiver廣播接受者中不能新增AlertDialog對話方塊的問題android.view.WindowManager$BadTokenException

在BroadcastReceiver,當我們建立一個AlertDialog並show出來的時候,出現了下面的錯誤: 12-24 14:10:57.025: E/AndroidRuntime(17600): java.lang.RuntimeException: Unable

Dialogs對話方塊

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_h

Qt之標準對話方塊字型對話方塊

字型對話方塊 1、包含標頭檔案 #include < QFontDialog> void Widget::on_FontButton_clicked() { //ok 用

MFC如何拷貝資源對話方塊,工具欄等

 MFC的資源機制是兩個檔案的配合,xxx.rc(xxx為專案名稱)檔案和resource.h檔案的配合,res.rc以指令碼的形式描述了資源的形式,如***對話方塊大小,ID,有什麼按鈕,按鈕的ID等等 如“關於”對話方塊在rc檔案內的描述(怎麼開啟,找到rc檔案,資源管

Dialog對話方塊視窗

            該對話方塊是一種特殊型別的視窗,它在頂部有一個工具欄,在底部有一個按鈕欄。對話方塊視窗右上角只有一個關閉按鈕使用者可以配置對話方塊的行為顯示其他工具,如collapsible,minimizable,maximizable工具等。 <%@

【Qt】Qt的GUI設計與製作下篇:高階控制元件、Qt Designer、對話方塊

高階控制元件 Qt為了方便GUI的設計,不僅僅提供了QPushButton、QLabel這樣的單一控制元件,還提供了可以將多個控制元件功能合為一體的高階控制元件類。如:顯示日曆的QCalendarWidget類,還提供了將多個控制元件功能融為一體的控制元件。 QCalendarWidge

JS模態對話方塊彈出對話方塊嵌入網頁

<html> <head> <title>JS彈出一個網頁對話方塊,後面全變灰,並不可用。</title> <meta http-equiv="Content-Type" content="text/html; char

android開發 -- 對話方塊 Dialog 和 DialogFragment 詳解 Android 官方推薦 DialogFragment 建立對話方塊

 Android 官方推薦使用 : DialogFragment 建立對話方塊 ,不推薦直接使用Dialog建立對話方塊,所以能用寫對話方塊儘量用DialogFragment。自定義對話方塊也方便很多 推薦一篇DialogFragment的文章:http://blog.csdn.n

VS2013/MFC程式設計入門之六對話方塊:為對話方塊新增控制元件

建立對話方塊資源需要建立對話方塊模板、修改對話方塊屬性、為對話方塊新增各種控制元件等步驟,前面一講中已經講了建立對話方塊模板和修改對話方塊屬性,本節繼續講如何為對話方塊新增控制元件。        上一講中建立了一個名為“Addition”的工程,目的是生成一個實現加法

VS2013/MFC程式設計入門之七對話方塊:建立對話方塊類和新增控制元件變數

前兩講中為大家講解了如何建立對話方塊資源。建立好對話方塊資源後要做的就是生成對話方塊類了。再宣告下,生成對話方塊類主要包括新建對話方塊類、新增控制元件變數和控制元件的訊息處理函式等。        因為給大家的例程Addition是基於對話方塊的程式,所以程式自動建立了

VS2013/MFC程式設計入門之十六對話方塊:檔案對話方塊

上一講介紹的是訊息對話方塊,本節講解檔案對話方塊。        檔案對話方塊的分類 檔案對話方塊分為開啟檔案對話方塊和儲存檔案對話方塊,相信大家在Windows系統中經常見到這兩種檔案對話方塊。例如,很多編輯軟體像記事本等都有“開啟”選項,選擇“開啟”後會彈出一個對

VS2013/MFC程式設計:對話方塊:為控制元件新增訊息處理函式

 建立對話方塊類和新增控制元件變數在上一講中已經講過,這一講的主要內容是如何為控制元件新增訊息處理函式。        MFC為對話方塊和控制元件等定義了諸多訊息,我們對它們操作時會觸發訊息,這些訊息最終由訊息處理函式處理。比如我們點選按鈕時就會產生BN_CLICKED訊息,修改編輯框內容時會產生EN

VS2013/MFC程式設計入門之十二對話方塊:屬性頁對話方塊及相關類的介紹

本節開始講一種特殊的對話方塊--屬性頁對話方塊。        屬性頁對話方塊的分類        屬性頁對話方塊想必大家並不陌生,XP系統中桌面右鍵點屬性,彈出的就是屬性頁對話方塊,它通過標籤切換各個頁面。另外,我們在建立MFC工程時使用的嚮導對話方塊也屬於屬性頁對

QQ線上客服程式碼絕對強制對話方塊

騰訊現在線上狀態程式碼引用必須要登入http://wp.qq.com/才能檢視,實在不方便。不過仔細一看程式碼還是比較簡單。只加2段字串就可以了,這下就可以強制對話了!,程式碼如下:tencent://message/?Menu=yes&uin=29183067&Site=唐人&Ser