Java Swing 彈出對話框的使用
Swing 中提供了 JOptionPane 類來實現類似 Windows 平台下的 MessageBox 的功能,利用 JOptionPane 類中的各個 static 方法來生成各種標準的對話框,實現顯示出信息、提出問題、警告、用戶輸入參數等功能。
這些對話框都是模式對 話框:
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
JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION); JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);
(3) 顯示 OptionDialog :該種對話框可以由用戶自己來設置各個按鈕的個數並返回用戶點擊各個按鈕的序號( 從 0 開始計數 )
Object[] options = {" 確定 "," 取消 "," 幫助 "}; int response=JOptionPane.showOptionDialog(this, " 這是個選項對話框,用戶可以選擇自己的按鈕的個數 ", " 選項對話框標題 ",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if(response==0) { this.setTitle(" 您按下了第 OK 按鈕 "); } else if(response==1) { this.setTitle(" 您按下了第 Cancel 按鈕 "); } else if(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 按鈕 "); }else if(response==1) { this.setTitle(" 您按下了第 Cancel 按鈕 "); } else if(response==2) { this.setTitle(" 您按下了第 Help 按鈕 "); }
(4) 顯示 InputDialog 以便讓用戶進行輸入
String inputValue = JOptionPane.showInputDialog("Please input a value"); String inputValue = JOptionPane.showInputDialog("Please input a value");
(5) 顯示 InputDialog 以便讓用戶進行選擇地輸入
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 Java Tutorial 中的 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;
最後更新:2017-04-03 05:39:09