javax.swing
類 JOptionPane
javax.swing.JOptionPane
- 所有已實現的接口:
- ImageObserver, MenuContainer, Serializable, Accessible
public class JOptionPaneextends JComponentimplements Accessible
JOptionPane
有助於方便地彈出要求用戶提供值或向其發出通知的標準對話框。有關使用 JOptionPane
的信息,請參見 The Java Tutorial 中的 How to Make Dialogs 一節。
雖然由於方法數多使 JOptionPane
類可能顯得複雜,但幾乎所有此類的使用都是對下列靜態 showXxxDialog
方法之一的單行調用:
所有這些方法還可能以
方法名 描述 showConfirmDialog 詢問一個確認問題,如 yes/no/cancel。 showInputDialog 提示要求某些輸入。 showMessageDialog 告知用戶某事已發生。 showOptionDialog 上述三項的大統一 (Grand Unification)。
showInternalXXX
風格出現,該風格使用內部窗體來保存對話框(請參見 JInternalFrame
)。此外還定義了多種便捷方法,這些方法重載那些基本方法,使用不同的參數列表。
所有對話框都是有模式的。在用戶交互完成之前,每個 showXxxDialog
方法都一直阻塞調用者。
圖標 | 消息 |
輸入值 | |
選項按鈕 |
ComponentOrientation
屬性。參數:
這些方法的參數遵守一致的模式:
- parentComponent
- 定義作爲此對話框的父對話框的
Component
。通過兩種方式使用此參數:包含它的Frame
可以用作對話框的父Frame
,在對話框的位置使用其屏幕座標。一般情況下,將對話框緊靠組件置於其之下。此參數可以爲null
,在這種情況下,默認的Frame
用作父級,並且對話框將居中位於屏幕上(取決於 L&F)。- message
- 要置於對話框中的描述消息。在最常見的應用中,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
- 定義在對話框的底部顯示的選項按鈕的集合:
用戶並非僅限於使用此選項按鈕集合。使用 options 參數可以提供想使用的任何按鈕。
DEFAULT_OPTION
YES_NO_OPTION
YES_NO_CANCEL_OPTION
OK_CANCEL_OPTION
- 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;
警告:Swing 不是線程安全的。有關更多信息,請參閱 Swing's Threading Policy。
警告:此類的序列化對象與以後的 Swing 版本不兼容。當前序列化支持適用於短期存儲,或適用於在運行相同 Swing 版本的應用程序之間進行 RMI(Remote Method Invocation,遠程方法調用)。從 1.4 版本開始,已在 java.beans
包中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 XMLEncoder
。
- 另請參見:
JInternalFrame