Java Swing 彈出對話方塊的使用
ConfirmDialog --- 確認對話方塊,提出問題,然後由使用者自己來確認 ( 按 "Yes" 或 "No" 按鈕 )
InputDialog --- 提示輸入文字
MessageDialog --- 顯示資訊
OptionDialog -- 組合其它三個對話方塊型別。
這四個對話方塊可以採用 showXXXDialog() 來顯示,如 showConfirmDialog() 顯示確認對話方塊、showInputDialog() 顯示輸入文字對話方塊、 showMessageDialog() 顯示資訊對話方塊、showOptionDialog() 顯示選擇性的對話方塊。它們所使用的引數說明如下:
① ParentComponent :指示對話方塊的父視窗物件,一般為當前視窗。也可以為 null 即採用預設的Frame 作為父視窗,此時對話方塊將設定在螢幕的正中。
② message :指示要在對話方塊內顯示的描述性的文字
③ String title :標題條文字串。
④ Component :在對話方塊內要顯示的元件 ( 如按鈕 )
⑤ Icon :在對話方塊內要顯示的圖示
⑥ messageType :一般可以為如下的值 ERROR_MESSAGE 、INFORMATION_MESSAGE 、 WARNING_MESSAGE 、 QUESTION_MESSAGE、 PLAIN_MESSAGE 、
⑦ optionType :它決定在對話方塊的底部所要顯示的按鈕選項。一般可以為 DEFAULT_OPTION 、YES_NO_OPTION 、 YES_NO_CANCEL_OPTION 、 OK_CANCEL_OPTION 。
使用例項:
(1) 顯示 MessageDialog
JOptionPane.showMessageDialog(null, " 在對話方塊內顯示的描述性的文字 ", " 標題條文字串", JOptionPane.ERROR_MESSAGE);
(2) 顯示 ConfirmDialog
Java程式碼-
JOptionPane.showConfirmDialog(
- JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);
(3) 顯示 OptionDialog :該種對話方塊可以由使用者自己來設定各個按鈕的個數並返回使用者點選各個按鈕的序號( 從 0 開始計數 )
Java程式碼- Object[] options = {" 確定 "," 取消 "," 幫助 "};
- int response=JOptionPane.showOptionDialog(this, " 這是個選項對話方塊,使用者可以選擇自己的按鈕的個數 ", " 選項對話方塊標題 ",JOptionPane.YES_OPTION,
- JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
- if(response==0) {
- this.setTitle(" 您按下了第 OK 按鈕 ");
- } elseif(response==1) {
- this.setTitle(" 您按下了第 Cancel 按鈕 ");
- } elseif(response==2) {
- this.setTitle(" 您按下了第 Help 按鈕 ");
- }
- Object[] options = {" 確定 "," 取消 "," 幫助 "};
- int response=JOptionPane.showOptionDialog(this, " 這是個選項對話方塊,使用者可以選擇自己的按鈕的個數 ", " 選項對話方塊標題 ",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
- if(response==0) {
- this.setTitle(" 您按下了第 OK 按鈕 ");
- }elseif(response==1) {
- this.setTitle(" 您按下了第 Cancel 按鈕 ");
- } elseif(response==2) {
- this.setTitle(" 您按下了第 Help 按鈕 ");
- }
(4) 顯示 InputDialog 以便讓使用者進行輸入
Java程式碼- String inputValue = JOptionPane.showInputDialog("Please input a value");
- String inputValue = JOptionPane.showInputDialog("Please input a value");
(5) 顯示 InputDialog 以便讓使用者進行選擇地輸入
Java程式碼- Object[] possibleValues = { "First", "Second", "Third" }; // 使用者的選擇專案
- ject selectedValue = JOptionPane.showInputDialog(null, "Choose one","Input",JOptionPane.INFORMATION_MESSAGE, null, possibleValues,possibleValues[0]);
- setTitle(" 您按下了 "+(String)selectedValue+" 專案 ");
public class JOptionPane extends JComponent implements Accessible
JOptionPane 有助於方便地彈出要求使用者提供值或向其發出通知的標準對話方塊。有關使用 JOptionPane的資訊,請參見 The JavaTutorial 中的 How to Make Dialogs 一節。
雖然由於方法數多使 JOptionPane 類可能顯得複雜,但幾乎所有此類的使用都是對下列靜態showXxxDialog 方法之一的單行呼叫:
方法名 |
描述 |
showConfi |
|
rmDialog |
詢問一個確認問題,如 yes/no/cancel。 |
showInputDialog |
提示要求某些輸入。 |
showMessageDialog |
告知使用者某事已發生。 |
showOptionDialog |
上述三項的大統一 (Grand Unification)。 |
所有這些方法還可能以 showInternalXXX 風格出現,該風格使用內部窗體來儲存對話方塊(請參見JInternalFrame )。此外還定義了多種便捷方法,這些方法過載那些基本方法,使用不同的引數列表。
所有對話方塊都是有模式的。在使用者互動完成之前,每個 showXxxDialog 方法都一直阻塞呼叫者。
圖示 |
訊息 |
輸入值 |
|
選項按鈕 |
這些對話方塊的基本外形通常與右圖類似,儘管各種外觀從根本上決定著最後結果。尤其是,外觀可以調整佈局以適應選項窗格的 ComponentOrientation 屬性。
引數:
這些方法的引數遵守一致的模式:
parentComponent
定義作為此對話方塊的父對話方塊的 Component 。通過兩種方式使用此引數:包含它的 Frame 可以用作對話方塊的父 Frame ,在對話方塊的位置使用其螢幕座標。一般情況下,將對話方塊緊靠元件置於其之下。此引數可以為null ,在這種情況下,預設的 Frame 用作父級,並且對話方塊將居中位於螢幕上(取決於 L&F )。
要置於對話方塊中的描述訊息。在最常見的應用中, message 就是一個 String 或 String 常量。不過,此引數的型別實際上是 Object 。其解釋依賴於其型別:
Object[]
物件陣列被解釋為在縱向堆疊中排列的一系列 message (每個物件一個)。解釋是遞迴式的,即根據其型別解釋陣列中的每個物件。
Component
該 Component 在對話方塊中顯示。
Icon
該 Icon 被包裝在 JLabel 中並在對話方塊中顯示。
其他
該物件通過呼叫其 toString 方法被轉換為 String 。結果被包裝在 JLabel 中顯示。
messageType
定義 message 的樣式。外觀管理器根據此值對對話方塊進行不同地佈置,並且通常提供預設圖示。可能的值為:
ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE
optionType
定義在對話方塊的底部顯示的選項按鈕的集合:
DEFAULT_OPTION
YES_NO_OPTION
YES_NO_CANCEL_OPTION
OK_CANCEL_OPTION
使用者並非僅限於使用此選項按鈕集合。使用 options 引數可以提供想使用的任何按鈕。
options
將在對話方塊底部顯示的選項按鈕集合的更詳細描述。 options 引數的常規值是 String 陣列,但是引數型別是Object 陣列。根據物件的以下型別為每個物件建立一個按鈕:
Component
該元件被直接新增到按鈕行中。
Icon
建立的 JButton 以此圖示作為其標籤。
其他
該 Object 通過使用其 toString 方法轉換為字串,並使用該結果作為 JButton 的標籤。
icon
要置於對話方塊中的裝飾性圖示。圖示的預設值由 messageType 引數確定。
title
對話方塊的標題。
initialValue
預設選擇(輸入值)。
當選擇更改時,呼叫生成 PropertyChangeEvent 的 setValue 方法。
如果已為所有輸入 setWantsInput 配置了 JOptionPane ,則還可以偵聽繫結屬性JOptionPane.INPUT_VALUE_PROPERTY ,以確定何時使用者輸入或選擇了值。
當其中一個 showXxxDialog 方法返回整數時,可能的值為:
YES_OPTION
NO_OPTION
CANCEL_OPTION
OK_OPTION
CLOSED_OPTION
示例:
顯示一個錯誤對話方塊,該對話方塊顯示的 message 為 'alert' :
JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
顯示一個內部資訊對話方塊,其 message 為 'information' :
JOptionPane.showInternalMessageDialog(frame, "information",
"information", JOptionPane.INFORMATION_MESSAGE);
顯示一個資訊面板,其 options 為 "yes/no" , message 為 'choose one' :
JOptionPane.showConfirmDialog(null,
"choose one", "choose one", JOptionPane.YES_NO_OPTION);
顯示一個內部資訊對話方塊,其 options 為 "yes/no/cancel" , message 為 'please choose one',並具有 title 資訊:
JOptionPane.showInternalConfirmDialog(frame,
"please choose one", "information",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
顯示一個警告對話方塊,其 options 為 OK 、 CANCEL , title 為 'Warning' , message 為 'Click OK to continue' :
Object[] options = { "OK", "CANCEL" };
JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
顯示一個要求使用者鍵入 String 的對話方塊:
String inputValue = JOptionPane.showInputDialog("Please input a value");
顯示一個要求使用者選擇 String 的對話方塊:
Object[] possibleValues = { "First", "Second", "Third" };
Object selectedValue = JOptionPane.showInputDialog(null,
"Choose one", "Input",
JOptionPane.INFORMATION_MESSAGE, null,
possibleValues, possibleValues[0]);
直接使用:
要直接建立和使用 JOptionPane ,標準模式大致如下:
- JOptionPane pane = new JOptionPane(arguments); pane.set.Xxxx(...); // Configure
- JDialog dialog = pane.createDialog(parentComponent, title);
- dialog.show(); Object selectedValue = pane.getValue();
- if(selectedValue == null) return CLOSED_OPTION; //If there is not an array of option buttons: if(options == null) {
- if(selectedValue instanceof Integer) return ((Integer)selectedValue).intValue();
- return CLOSED_OPTION; } //If there is an array of option buttons:
- for(int counter = 0, maxCounter = options.length; counter < maxCounter; counter++) {
- if(options[counter].equals(selectedValue))
- return counter; }
- return CLOSED_OPTION;