使用Java編寫GUI對話方塊的教程_java

來源:互聯網
上載者:User

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

JDialog類作作對話方塊的基類。對話方塊與一般視窗不同,對話方塊依賴其他視窗,當它所依賴的視窗消失或最小化時,對話方塊也將消失;視窗還原時,對話方塊又會自動回復。

對話方塊分為強制和非強制兩種。強制型對話方塊不能中斷對話過程,直至對話方塊結束,才讓程式響應對話方塊以外的事件。非強制型對話方塊可以中斷對話過程,去響應對話方塊以外的事件。強制型也稱有強制回應對話方塊,非強制對話方塊也稱非強制回應對話方塊。

JDialog對象也是一種容器,因此也可以給JDialog對話方塊指派布局管理器,對話方塊的預設布局為BoarderLayout布局。但組件不能直接加到對話方塊中,對話方塊也包含一個內容面板,應當把組件加到JDialog對象的內容面板中。由於對話方塊依賴視窗,因此要建立對話方塊,必須先要建立一個視窗。

JDialog類常用的構造方法有3個:

  1. JDialog(),構造一個初始化不可見的非強制型對話方塊。
  2. JDialog(JFramef,String s),構造一個初始化不可見的非強制型對話方塊,參數f設定對話方塊所依賴的視窗,參數s用於設定標題。通常先聲明一個JDialog類的子類,然後建立這個子類的一個對象,就建立了一個對話方塊。
  3. JDialog(JFrame f,String s,boolean b),構造一個標題為s,初始化不可見的對話方塊。參數f設定對話方塊所依賴的視窗,參數b決定對話方塊是否強制或非強制型。

JDialog類的其他常用方法有以下幾個:

  • getTitle(),擷取對話方塊的標題。
  • setTitle(String s),設定對話方塊的標題。
  • setModal(boolean b),設定對話方塊的模式。
  • setSize(),設定框的大小。
  • setVisible(boolean b),顯示或隱藏對話方塊。

【例】小應用程式聲明一個使用者視窗類別和對話方塊類,使用者視窗有兩個按鈕和兩個文字框,當點擊某個按鈕時,對應的對話方塊被啟用。在對話方塊中輸入相應資訊,按對話方塊的確定按鈕。確定按鈕的監視方法,將對話方塊中輸入的資訊傳送給使用者視窗,並在使用者視窗的相應文字框中顯示選擇資訊。

import java.applet.*import javax.swing.*;import java.awt.*;import java.awt.event.*;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 = this.getContentPane();    con.setLayout(new GridLayout(2,2));    this.setSize(200,100);    this setLocation(100,100);    button1 = new JButton("選擇水果");    button2 = new JButton("選擇食品");    button1.addActionListener(this);    button2.addActionListener(this);    text1 = new JTextField(20);    text2 = new JTextField(20);    con.add(button1);    con.add(button2);    con.add(text1);    con.add(text2);    this.setVisible(true);    this.pack();  }  public static void returnName(String s){    if(flg ==1)      text1.setText("選擇的水果是:"+s);    else if(flg == 2)      text2.setText("選擇的食品是:"+s);  }  public void actionPerformed(ActionEvent e){    MyDialog dialog;    if(e.getSource()==button1){      dialog = new MyDialog(this,"水果");      dialog.setVisible(true);      flg =1;    }    else if(e.getSource()==button2){      dialog =new MyDialog(this,"食品");      dialog.setVisible(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 = this.getContentPane();    title = new JLabel("輸入"+s+"名稱");    text = new JTextField(10);    text.setEditable(true);    con.setLayout(new FlowLayout());    con.setSize(200,100);    setModal(false);    done = new JButton("確定");    done.addActionListener(this);    con.setVisible(true);    this.pack();  }  public void actionPerformed(ActionEvent e){    MyWindow.returnName(text.getText());    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(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[]{“踢足球“,“打籃球”,“跑步”,“跳繩”},“跑步”);

第四個參數是資訊類型,第五個參數在這裡沒有特別的作用,總是用null;第六個參數定義了一個供選擇的字串數組,第七個參數是選擇的預設值。對話方塊還包括“確定”和“撤銷”按鈕。
JOptionPane對話方塊類型

由 JOptionPane 對話方塊返回的結果

JOptionPane 對話方塊的資訊類型選項

有時,程式只是簡單地輸出一些資訊,並不要求使用者有反饋。這樣的對話方塊可用以下形式的代碼建立:

  JOptionPane.showMessageDialog(parent, “這是一個Java程式”,    “我是輸出資訊對話方塊”,JOptionPane.PLAIN_MESSAGE);


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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.