天天看點

Java開發筆記(一百三十四)Swing的基本對話框

桌面程式在運作過程中,時常需要在主界面之上彈出小窗,把某種消息告知使用者,以便使用者及時知曉并對症處理。這類小視窗通常稱作對話框,依據消息互動的過程,可将對話框分為三類:消息對話框、确認對話框、輸入對話框,分别介紹如下:

1、消息對話框

這類對話框僅僅向使用者展示一段文本,告訴使用者發生了什麼事情。它起到了提示的作用,但不支援使用者幹預事務。不管使用者同意與否,都無法改變事件的進展。

在Swing架構中,消息對話框由消息的标題、内容、确定按鈕組成。調用JOptionPane工具的靜态方法showMessageDialog即可彈出消息對話框,該方法的第一個參數為消息框依賴的視窗對象,第二個參數為消息的内容文本,第三個參數為消息的标題文本,第四個參數為消息的圖示類型,圖示類型主要有下列五種:

JOptionPane.PLAIN_MESSAGE:無消息圖示。

JOptionPane.INFORMATION_MESSAGE:灰圈資訊圖示,用于表示提示消息。

JOptionPane.QUESTION_MESSAGE:方框問号圖示,用于表示确認消息。

JOptionPane.WARNING_MESSAGE:三角感歎圖示,用于表示警告消息。

JOptionPane.ERROR_MESSAGE:紅圈紅叉圖示,用于表示錯誤消息。

下面是在主界面上顯示消息對話框的代碼例子:

// 顯示消息對話框。消息對話框隻有一個确定按鈕
		JOptionPane.showMessageDialog(frame, "系統即将關機,請趕緊儲存檔案", "緻命錯誤", JOptionPane.ERROR_MESSAGE);
           

從以上代碼可知,目前消息展示了系統出現異常的錯誤消息,程式運作後的對話框效果如下圖所示。

Java開發筆記(一百三十四)Swing的基本對話框

2、确認對話框

這類對話框在展示事件說明的同時,給定幾個可能的選項,以便使用者做出恰當的選擇,然後程式再根據使用者的選擇分别進行後續處理。

在Swing架構中,确認對話框由消息的标題、内容,以及若幹選項按鈕組成。有時選項控件包括“是”、“否”、“取消”三個按鈕,有時包括“确定”、“取消”兩個按鈕。調用JOptionPane工具的靜态方法showConfirmDialog即可彈出确認對話框,該方法的輸入參數說明同前述的showMessageDialog方法,不同之處在于,showConfirmDialog方法存在整型傳回值,傳回參數主要有以下三個數值,代表使用者單擊了哪個按鈕:

1、JOptionPane.YES_OPTION:表示肯定的選擇,對應“是”按鈕與“确認”按鈕。

2、JOptionPane.NO_OPTION:表示否定的選擇,對應“否”按鈕。

3、JOptionPane.CANCEL_OPTION:表示取消選擇,也就是不做任何選擇,對應“取消”按鈕。

下面是在主界面上顯示确認對話框,并開展分支處理的代碼例子:

// 顯示确認對話框。确認對話框有“是”、“否”、“取消”三個按鈕,該對話框傳回哪個按鈕被單擊了
		// 該對話框不支援類型QUESTION_MESSAGE,且固定顯示問号圖示
		int result = JOptionPane.showConfirmDialog(frame, "尊敬的使用者,你真的要解除安裝我嗎?", "溫馨提示", JOptionPane.INFORMATION_MESSAGE);
		if (result == JOptionPane.YES_OPTION) { // 單擊了“是”按鈕
			label.setText("您選擇了“是”按鈕。雖然依依不舍,但是隻能離開了");
		} else if (result == JOptionPane.NO_OPTION) { // 單擊了“否”按鈕
			label.setText("您選擇了“否”按鈕。讓我再陪你三百六十五個日夜");
		} else if (result == JOptionPane.CANCEL_OPTION) { // 單擊了“取消”按鈕
			label.setText("您選擇了“取消”按鈕。感謝你依然如昨的不變情懷");
		}
           

運作包含上面代碼的測試确認程式,一番操作後彈出如下圖所示的确認對話框。

Java開發筆記(一百三十四)Swing的基本對話框

分别單擊對話框上面的三個按鈕,程式主界面的顯示效果如下面三張圖所示。

Java開發筆記(一百三十四)Swing的基本對話框
Java開發筆記(一百三十四)Swing的基本對話框
Java開發筆記(一百三十四)Swing的基本對話框

3、輸入對話框

這類對話框需要使用者提供更加詳細的資訊,而不僅僅“是”或者“否”的選擇,例如:要求使用者輸入一段文本,要求使用者在一組清單裡選擇其中一個,諸如此類。

在Swing架構中,輸入對話框由消息的标題、内容、确認按鈕、取消按鈕,以及接收使用者輸入的控件組成。對于文本輸入的情況,對話框上會顯示單行輸入框TextField;對于清單選擇的情況,對話框上會顯示下拉框ComboBox。調用JOptionPane工具的靜态方法showInputDialog即可彈出輸入對話框,隻輸入文本的話,該方法依舊填寫四個入參:視窗對象、内容文本、标題文本、圖示類型;但若要求在清單中選擇,則該方法還需增加幾個入參,用來顯示清單的文本數組,以及預設選中的清單元素。

下面是在主界面上顯示文本輸入對話框的代碼例子:

// 顯示輸入對話框。輸入對話框有“确認”、“取消”兩個按鈕,該對話框傳回輸入框内的文本
		String result = JOptionPane.showInputDialog(frame, "請輸入您要查詢的商品名稱:", "搜尋一下", JOptionPane.QUESTION_MESSAGE);
		label.setText("您輸入的商品名稱是:"+result);
           

運作以上的測試輸入代碼,通過單擊按鈕彈出文本輸入對話框,再鍵入編輯文本,這時的對話框效果如下圖所示。

Java開發筆記(一百三十四)Swing的基本對話框

接着分别單擊确認和取消按鈕,兩種情況之下的程式主界面效果如以下兩張圖所示。

Java開發筆記(一百三十四)Swing的基本對話框
Java開發筆記(一百三十四)Swing的基本對話框

還有在主界面上顯示清單輸入對話框的代碼例子:

Object[] options = new Object[]{"魚香肉絲飯", "香菇滑雞飯", "黑椒牛排飯"};
		// 顯示下拉對話框。下拉對話框需要傳入選項數組以及預設選項,該對話框傳回下拉框的選擇項
		Object result = JOptionPane.showInputDialog(frame, "請選擇便當名稱", "吃飯啦", JOptionPane.WARNING_MESSAGE, null, options, options[0]);
		label.setText("您點的便當是:"+result);
           

運作以上的測試清單代碼,通過單擊按鈕彈出的對話框初始界面如下圖所示。

Java開發筆記(一百三十四)Swing的基本對話框

然後單擊下拉框,并在彈出的下拉清單中選擇某一項,選完前後的對話框效果如以下兩張圖所示。

Java開發筆記(一百三十四)Swing的基本對話框
Java開發筆記(一百三十四)Swing的基本對話框

最後單擊對話框裡的确認按鈕,程式主界面便展示了剛才清單選擇的結果,正如下圖所示。

Java開發筆記(一百三十四)Swing的基本對話框

注意到這些對話框統統調用了靜态方法,既然沒有事先建立對話框對象,也就無法調用setFont方法設定對話框内部控件的字型了。此時可通過UIManager工具單獨給對話框設定字型,詳細的設定代碼如下所示:

Font font = new Font("中号", Font.PLAIN, 16);
// 設定對話框内部按鈕的展示效果
UIManager.put("Button.font", new FontUIResource(font));
// 設定對話框内部标簽的展示效果
UIManager.put("Label.font", new FontUIResource(font));
// 設定對話框内部輸入框的展示效果
UIManager.put("TextField.font", new FontUIResource(font));
// 設定對話框内部下拉框的展示效果
UIManager.put("ComboBox.font", new FontUIResource(font));
           

更多Java技術文章參見《Java開發筆記(序)章節目錄》