Java對話方塊(JDialog類和JOptionPane類)
阿新 • • 發佈:2019-02-07
對話方塊是為了人機對話過程提供互動模式的工具。應用程式通過對話方塊,或給使用者提供資訊,或從使用者獲得資訊。對話方塊是一個臨時視窗,可以在其中放置用於得到使用者輸入的控制元件。在Swing中,有兩個對話方塊類,它們是JDialog類和JOptionPane類。JDialog類提供構造並管理通用對話方塊;JOptionPane類給一些常見的對話方塊提供許多便於使用的選項,例如,簡單的“yes-no”對話方塊等。
對話方塊分為強制和非強制兩種。強制型對話方塊不能中斷對話過程,直至對話方塊結束,才讓程式響應對話方塊以外的事件。非強制型對話方塊可以中斷對話過程,去響應對話方塊以外的事件。強制型也稱有模式對話方塊,非強制對話方塊也稱非模式對話方塊。
JDialog物件也是一種容器,因此也可以給JDialog對話方塊指派佈局管理器,對話方塊的預設佈局為BoarderLayout佈局。但元件不能直接加到對話方塊中,對話方塊也包含一個內容面板,應當把元件加到JDialog物件的內容面板中。由於對話方塊依賴視窗,因此要建立對話方塊,必須先要建立一個視窗。
JDialog類常用的構造方法有3個:
JDialog類的其他常用方法有以下幾個:
【例 11-16】小應用程式宣告一個使用者視窗類和對話方塊類,使用者視窗有兩個按鈕和兩個文字框,當點選某個按鈕時,對應的對話方塊被啟用。在對話方塊中輸入相應資訊,按對話方塊的確定按鈕。確定按鈕的監視方法,將對話方塊中輸入的資訊傳送給使用者視窗,並在使用者視窗的相應文字框中顯示選擇資訊(檢視原始檔)。
上述例子建立的是強制型對話方塊,改為非強制型對話方塊就允許使用者在對話過程中暫停,與程式的其他部分進行互動。這樣,在介面中可以看到部分對話的效果。
將上述例子改為非強制型對話方塊只要作少量的改動即可。首先是將對話方塊構造方法中的程式碼“super(F,s,true);”改為 “super(F,s,false);”。
第二個變化:原來是響應確定按鈕事件時,才呼叫方法returnName(),將對話方塊得到的字串返回給程式。現在當文字框輸入選擇字串結束後,就應該立即呼叫該方法。為此,需要對文字框的輸入事件作監視,為文字註冊監視器:
public void actionPerformed(ActionEvent e){
if(e.getSource()==text){
MyWindow.returnName(text.getText());
}
else if(e.getSource()==done){
MyWindow.returnName(text.getText());
setVisible(false);
dispose();//清除資源
}
}
int result = JOptionPane.showConfirmDialog(parent,“確實要退出嗎”, “退出確認“,JOptionPane.YES_NO_CANCEL_OPTION);
其中方法名的中間部分文字“Confirm”是建立對話方塊的型別,文字Confirm指明是選用確認對話方塊。將文字Confirm改為另外三種類型的某一個,就成為相應型別的對話方塊。上述程式碼的四個引數的意義是:第一個引數指定這個對話方塊的父視窗;第二個引數是對話方塊顯示的文字;第三個引數是對話方塊的標題;最後一個引數指明對話方塊有三個按鈕,分別為“是(Y)”,“否(N)”,和“撤銷”。方法的返回結果是使用者響應了這個對話方塊後的結果,參見表 11-5 給出的可能答案。
輸入對話方塊以列表或文字框形式請求使用者輸入選擇資訊,使用者可以從列表中選擇選項或從文字框中輸入資訊。以下是一個從列表中選擇執行專案的輸入對話方塊的示意程式碼:
String result = (String)JOptionPane.showInputDialog(parent,
“請選擇一項運動專案”, “這是運動專案選擇對話方塊”,
JOptionPane.QUESTION_MESSAGE,null,
new Object[]{“踢足球“,“打籃球”,“跑步”,“跳繩”},“跑步”);
第四個引數是資訊型別,參見11-6,第五個引數在這裡沒有特別的作用,總是用null;第六個引數定義了一個供選擇的字串陣列,第七個引數是選擇的預設值。對話方塊還包括“確定”和“撤銷”按鈕。
有時,程式只是簡單地輸出一些資訊,並不要求使用者有反饋。這樣的對話方塊可用以下形式的程式碼建立:
JOptionPane.showMessageDialog(parent, “這是一個Java程式”,
“我是輸出資訊對話方塊”,JOptionPane.PLAIN_MESSAGE);
上述程式碼中前三引數的意義與前面所述相同,最後引數是指定資訊型別為不包括任何圖示,參見表11-6。
JDialog類
JDialog類作作對話方塊的基類。對話方塊與一般視窗不同,對話方塊依賴其他視窗,當它所依賴的視窗消失或最小化時,對話方塊也將消失;視窗還原時,對話方塊又會自動恢復。對話方塊分為強制和非強制兩種。強制型對話方塊不能中斷對話過程,直至對話方塊結束,才讓程式響應對話方塊以外的事件。非強制型對話方塊可以中斷對話過程,去響應對話方塊以外的事件。強制型也稱有模式對話方塊,非強制對話方塊也稱非模式對話方塊。
JDialog物件也是一種容器,因此也可以給JDialog對話方塊指派佈局管理器,對話方塊的預設佈局為BoarderLayout佈局。但元件不能直接加到對話方塊中,對話方塊也包含一個內容面板,應當把元件加到JDialog物件的內容面板中。由於對話方塊依賴視窗,因此要建立對話方塊,必須先要建立一個視窗。
JDialog類常用的構造方法有3個:
- JDialog(),構造一個初始化不可見的非強制型對話方塊。
- JDialog(JFramef,String s),構造一個初始化不可見的非強制型對話方塊,引數f設定對話方塊所依賴的視窗,引數s用於設定標題。通常先宣告一個JDialog類的子類,然後建立這個子類的一個物件,就建立了一個對話方塊。
- JDialog(JFrame f,String s,boolean b),構造一個標題為s,初始化不可見的對話方塊。引數f設定對話方塊所依賴的視窗,引數b決定對話方塊是否強制或非強制型。
JDialog類的其他常用方法有以下幾個:
- getTitle(),獲取對話方塊的標題。
- setTitle(String s),設定對話方塊的標題。
- setModal(boolean b),設定對話方塊的模式。
- setSize(),設定框的大小。
- setVisible(boolean b),顯示或隱藏對話方塊。
【例 11-16】小應用程式宣告一個使用者視窗類和對話方塊類,使用者視窗有兩個按鈕和兩個文字框,當點選某個按鈕時,對應的對話方塊被啟用。在對話方塊中輸入相應資訊,按對話方塊的確定按鈕。確定按鈕的監視方法,將對話方塊中輸入的資訊傳送給使用者視窗,並在使用者視窗的相應文字框中顯示選擇資訊(檢視原始檔)。
上述例子建立的是強制型對話方塊,改為非強制型對話方塊就允許使用者在對話過程中暫停,與程式的其他部分進行互動。這樣,在介面中可以看到部分對話的效果。
將上述例子改為非強制型對話方塊只要作少量的改動即可。首先是將對話方塊構造方法中的程式碼“super(F,s,true);”改為 “super(F,s,false);”。
第二個變化:原來是響應確定按鈕事件時,才呼叫方法returnName(),將對話方塊得到的字串返回給程式。現在當文字框輸入選擇字串結束後,就應該立即呼叫該方法。為此,需要對文字框的輸入事件作監視,為文字註冊監視器:
public void actionPerformed(ActionEvent e){
if(e.getSource()==text){
MyWindow.returnName(text.getText());
}
else if(e.getSource()==done){
MyWindow.returnName(text.getText());
setVisible(false);
dispose();//清除資源
}
}
JOptionPane類
經常遇到非常簡單的對話情況,為了簡化常見對話方塊的程式設計,JOptionPane類定義了四個簡單對話方塊型別,參見表11-4。JOptionPane類提供一組靜態方法,讓使用者選用某種型別的對話方塊。下面的程式碼是選用確認對話方塊:int result = JOptionPane.showConfirmDialog(parent,“確實要退出嗎”, “退出確認“,JOptionPane.YES_NO_CANCEL_OPTION);
其中方法名的中間部分文字“Confirm”是建立對話方塊的型別,文字Confirm指明是選用確認對話方塊。將文字Confirm改為另外三種類型的某一個,就成為相應型別的對話方塊。上述程式碼的四個引數的意義是:第一個引數指定這個對話方塊的父視窗;第二個引數是對話方塊顯示的文字;第三個引數是對話方塊的標題;最後一個引數指明對話方塊有三個按鈕,分別為“是(Y)”,“否(N)”,和“撤銷”。方法的返回結果是使用者響應了這個對話方塊後的結果,參見表 11-5 給出的可能答案。
輸入對話方塊以列表或文字框形式請求使用者輸入選擇資訊,使用者可以從列表中選擇選項或從文字框中輸入資訊。以下是一個從列表中選擇執行專案的輸入對話方塊的示意程式碼:
String result = (String)JOptionPane.showInputDialog(parent,
“請選擇一項運動專案”, “這是運動專案選擇對話方塊”,
JOptionPane.QUESTION_MESSAGE,null,
new Object[]{“踢足球“,“打籃球”,“跑步”,“跳繩”},“跑步”);
第四個引數是資訊型別,參見11-6,第五個引數在這裡沒有特別的作用,總是用null;第六個引數定義了一個供選擇的字串陣列,第七個引數是選擇的預設值。對話方塊還包括“確定”和“撤銷”按鈕。
輸入 | 通過文字框、列表或其他手段輸入,另有“確定”和“撤銷”按鈕 |
確認 | 提出一個問題,待使用者確認,另有“是(Y)”、“否(N)”和“撤銷”按鈕 |
資訊 | 顯示一條簡單的資訊,另有“確定”和“撤銷”按鈕 |
選項 | 顯示一列供使用者選擇的選項 |
YES_OPTION | 使用者按了“是(Y)”按鈕 |
NO_OPTION | 使用者按了“否(N)”按鈕 |
CANCEL_OPTION | 使用者按了“撤銷”按鈕 |
OK_OPTION | 使用者按了“確定”按鈕 |
CLOSED_OPTION | 使用者沒按任何按鈕,關閉對話方塊視窗 |
PLAIN_MESSAGE | 不包括任何圖示 |
WARNING_MESSAGE | 包括一個警告圖示 |
QUESTION_MESSAGE | 包括一個問題圖示 |
INFORMATIN_MESSAGE | 包括一個資訊圖示 |
ERROR_MESSAGE | 包括一個出錯圖示 |
有時,程式只是簡單地輸出一些資訊,並不要求使用者有反饋。這樣的對話方塊可用以下形式的程式碼建立:
JOptionPane.showMessageDialog(parent, “這是一個Java程式”,
“我是輸出資訊對話方塊”,JOptionPane.PLAIN_MESSAGE);
上述程式碼中前三引數的意義與前面所述相同,最後引數是指定資訊型別為不包括任何圖示,參見表11-6。