當前位置:學者齋 >

計算機 >java語言 >

使用Java編寫GUI對話框教程講解

使用Java編寫GUI對話框教程講解

對話框是為了人機對話過程提供交互模式的工具。應用程序通過對話框,或給用户提供信息,或從用户獲得信息。對話框是一個臨時窗口,可以在其中放置用於得到用户輸入的控件。在Swing中,有兩個對話框類,它們是JDialog類和JOptionPane類。JDialog類提供構造並管理通用對話框;JOptionPane類給一些常見的對話框提供許多便於使用的選項,例如,簡單的“yes-no”對話框等。

使用Java編寫GUI對話框教程講解

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),顯示或隱藏對話框。

【例】小應用程序聲明一個用户窗口類和對話框類,用户窗口有兩個按鈕和兩個文本框,當點擊某個按鈕時,對應的對話框被激活。在對話框中輸入相應信息,按對話框的確定按鈕。確定按鈕的監視方法,將對話框中輸入的信息傳送給用户窗口,並在用户窗口的相應文本框中顯示選擇信息。

import et.*import g.*;import .*;import t.*;class MyWindow extends JFrame implements ActionListener{ private JButton button1,button2; private static int flg=0; private static JTextField text1,text2; Mywindow(String s){ super(s); Container con = ontentPane(); ayout(new GridLayout(2,2)); ize(200,100); this setLocation(100,100); button1 = new JButton("選擇水果"); button2 = new JButton("選擇食品"); ctionListener(this); ctionListener(this); text1 = new JTextField(20); text2 = new JTextField(20); (button1); (button2); (text1); (text2); isible(true); (); } public static void returnName(String s){ if(flg ==1) ext("選擇的水果是:"+s); else if(flg == 2) ext("選擇的食品是:"+s); } public void actionPerformed(ActionEvent e){ MyDialog dialog; if(ource()==button1){ dialog = new MyDialog(this,"水果"); isible(true); flg =1; } else if(ource()==button2){ dialog =new MyDialog(this,"食品"); isible(true); flg=2; } }}class MyDialog extends JDialog implements ActionListener{ JLabel title; JTextField text; JButton done; Mydialog(JFrame F,String s){ super(F,s,true);//模態 Container con = ontentPane(); title = new JLabel("輸入"+s+"名稱"); text = new JTextField(10); ditable(true); ayout(new FlowLayout()); ize(200,100); setModal(false); done = new JButton("確定"); ctionListener(this); isible(true); (); } public void actionPerformed(ActionEvent e){ rnName(ext()); setVisible(false); dispose(); }}public class Example6_6 extends Applet{ MyWindow window; MyDialog dialog; public void init(){ window = new MyWindow("帶對話框窗口"); }}

上述例子創建的是強制型對話框,改為非強制型對話框就允許用户在對話過程中暫停,與程序的其他部分進行交互。這樣,在界面中可以看到部分對話的效果。

將上述例子改為非強制型對話框只要作少量的改動即可。首先是將對話框構造方法中的代碼“super(F,s,true);”改為 “super(F,s,false);”。

第二個變化:原來是響應確定按鈕事件時,才調用方法returnName(),將對話框得到的字符串返回給程序。現在當文本框輸入選擇字符串結束後,就應該立即調用該方法。為此,需要對文本框的輸入事件作監視,為文本註冊監視器:

public void actionPerformed(ActionEvent e){ if(ource()==text){ rnName(ext()); } else if(ource()==done){ rnName(ext()); setVisible(false); dispose();//清除資源 }}

JOptionPane類

經常遇到非常簡單的對話情況,為了簡化常見對話框的編程,JOptionPane類定義了四個簡單對話框類型,參見表11-4。JOptionPane類提供一組靜態方法,讓用户選用某種類型的對話框。下面的代碼是選用確認對話框:

int result = ConfirmDialog(parent,“確實要退出嗎”, “退出確認“,_NO_CANCEL_OPTION);

其中方法名的中間部分文字“Confirm”是創建對話框的類型,文字Confirm指明是選用確認對話框。將文字Confirm改為另外三種類型的某一個,就成為相應類型的對話框。上述代碼的四個參數的意義是:第一個參數指定這個對話框的父窗口;第二個參數是對話框顯示的文字;第三個參數是對話框的標題;最後一個參數指明對話框有三個按鈕,分別為“是(Y)”,“否(N)”,和“撤銷”。方法的返回結果是用户響應了這個對話框後的.結果,參見表 11-5 給出的可能答案。

輸入對話框以列表或文本框形式請求用户輸入選擇信息,用户可以從列表中選擇選項或從文本框中輸入信息。以下是一個從列表中選擇運行項目的輸入對話框的示意代碼:

String result = (String)InputDialog(parent, “請選擇一項運動項目”, “這是運動項目選擇對話框”, TION_MESSAGE,null, new Object[]{“踢足球“,“打籃球”,“跑步”,“跳繩”},“跑步”);

第四個參數是信息類型,第五個參數在這裏沒有特別的作用,總是用null;第六個參數定義了一個供選擇的字符串數組,第七個參數是選擇的默認值。對話框還包括“確定”和“撤銷”按鈕。

JOptionPane對話框類型

由 JOptionPane 對話框返回的結果

JOptionPane 對話框的信息類型選項

有時,程序只是簡單地輸出一些信息,並不要求用户有反饋。這樣的對話框可用以下形式的代碼創建:

MessageDialog(parent, “這是一個Java程序”, “我是輸出信息對話框”,N_MESSAGE);

上述代碼中前三參數的意義與前面所述相同,最後參數是指定信息類型為不包括任何圖標。

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-mo/jsj/java/l1m5r.html