| 類型 | 方法 | 用途 | 典型返回值 |
|---|---|---|---|
| 確認對話框 | showConfirmDialog() | 詢問用戶是/否決定 | JOptionPane.YES_OPTION / NO_OPTION / CANCEL_OPTION |
| 輸入對話框 | showInputDialog() | 獲取用戶文本輸入或選擇 | String / Object (選擇項) |
| 消息對話框 | showMessageDialog() | 純信息展示 | 無 (void) |
| 選項對話框 | showOptionDialog() | 完全自定義按鈕組合 | int (按鈕索引 0-based) |
所有對話框均為**模態**,阻塞調用線程直到用戶響應。
parentComponent:父窗口 (null 為屏幕居中)message:提示文本/對象title:標題欄文本messageType:圖標類型 (ERROR/INFORMATION/WARNING/QUESTION/PLAIN_MESSAGE)optionType:按鈕組合 (DEFAULT/YES_NO/YES_NO_CANCEL/OK_CANCEL)icon:自定義圖標options:自定義按鈕文本/組件數組 (OptionDialog 專用)initialValue:默認選中項JOptionPane.showMessageDialog(
null,
"在對話框內顯示的描述性文字",
"標題欄文字",
JOptionPane.ERROR_MESSAGE
);
int result = JOptionPane.showConfirmDialog(
null,
"choose one",
"choose one",
JOptionPane.YES_NO_OPTION
);
if (result == JOptionPane.YES_OPTION) { /* 用戶點是 */ }
Object[] options = {"確定", "取消", "幫助"};
int response = JOptionPane.showOptionDialog(
this, // 父組件
"這是個選項對話框,用戶可以選擇自己的按鈕個數", // 消息
"選項對話框標題", // 標題
JOptionPane.YES_OPTION, // optionType (此處影響默認鍵盤焦點)
JOptionPane.QUESTION_MESSAGE, // messageType
null, // 自定義圖標
options, // 按鈕文本數組
options[0] // 默認選中
);
switch (response) {
case 0: setTitle("您按下了第 OK 按鈕"); break;
case 1: setTitle("您按下了第 Cancel 按鈕"); break;
case 2: setTitle("您按下了第 Help 按鈕"); break;
case -1: setTitle("用戶關閉窗口"); break; // 關閉按鈕返回 -1
}
String input = JOptionPane.showInputDialog("Please input a value");
if (input != null) { /* 用戶點確定並輸入內容 */ }
Object[] choices = {"First", "Second", "Third"};
Object selected = JOptionPane.showInputDialog(
null,
"Choose one",
"Input",
JOptionPane.INFORMATION_MESSAGE,
null,
choices,
choices[0]
);
if (selected != null) {
setTitle("您選擇了 " + selected + " 項目");
}
this (Frame/Panel) 可使對話框居中顯示於應用窗口message 參數接受 Object,可傳入 JLabel、JPanel 等組件實現富文本/複合佈局JScrollPane 包裹的 JTextAreaHeadlessExceptionJOptionPane 提供了開箱即用的標準對話框,覆蓋 90%+ 的用戶交互場景。掌握五大參數組合,可靈活構建從簡單提示到複雜選擇的各類交互,無需手寫 JDialog 繼承類,代碼更簡潔、外觀更統一、行為更標準。