Java awt-對話框簡單實現方式
Java awt-對話框簡單實現
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class dia { public static void main(String args[]) { JButton btn1=new JButton("modal"); JButton btn2=new JButton("unmodal"); JFrame f=new JFrame("DIaloDemo"); f.setSize(300,400); f.setLocation(300,200); f.setLayout(new FlowLayout()); f.add(btn1); f.add(btn2); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); final JLabel label=new JLabel(); final JDialog dialog=new JDialog(f,"Dialog"); dialog.setSize(220,150); dialog.setLocation(350,250); dialog.setLayout(new FlowLayout()); final JButton btn3=new JButton("sure"); dialog.add(btn3); btn1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dialog.setModal(true); if(dialog.getComponents().length==1){ dialog.add(label); } label.setText("modal dialog,click to close"); dialog.setVisible(true); } }); btn2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dialog.setModal(false); if(dialog.getComponents().length==1){ dialog.add(label); } label.setText("unmodal dialog,click to close"); dialog.setVisible(true); } }); btn3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dialog.dispose(); } }); } }
Java awt Dialog(對話框)學習
Dialog是Window類的子類,是一個容器類,屬於特殊組件。對話框是可以獨立存在的頂級窗口,因此用法與普通窗口的用法幾乎完全一樣。
對話框有如下兩點需要註意
(1)對話框通常依賴於其他窗口,就是通常有一個parent窗口
(2)對話框有非模式(non-modal)和模式(modal)兩種,當某個模式對話框被打開之後,該模式對話框總是位於它依賴的窗口之上;在模式對話框被關閉之前,它依賴的窗口無法獲得焦點
對話框有多個重載構造器
它的構造器可能有如下3個參數:
(1)owner:指定該對話框所依賴的窗口,既可以是窗口,也可以是對話框。
(2)title:指定該對話框的窗口標題
(3)modal:指定該對話框是否是模式的,true貨false
/** * 程序示范瞭模式對話框和非模式對話框的用法 */ package codes11; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Dialog; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class DialogTest { Frame f = new Frame("測試"); Dialog d1 = new Dialog(f, "模式對話框", true); Dialog d2 = new Dialog(f, "非模式對話框", false); Button b1 = new Button("打開模式對話框"); Button b2 = new Button("打開非模式對話框"); public void init() { d1.setBounds(20, 30, 300, 400); d2.setBounds(20, 30, 300, 400); b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { d1.setVisible(true); } }); b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { d2.setVisible(true); } }); f.add(b1); f.add(b2, BorderLayout.SOUTH); f.pack(); f.setVisible(true); } public static void main(String[] args) { new DialogTest().init(); } }
上面程序創建瞭d1和d2兩個對話框,其中d1是一個模式對話框,而d2是一個非模式對話框(兩個對話框都是空的)。該窗口中還提供瞭兩個按鈕,分別用於打開模式對話框和非模式對話框。打開模式對話框後鼠標無法激活原來的”測試窗口“;但打開非模式對話框後還可以激活原來的”測試窗口“。
運行程序,結果如下圖:
不管是模式對話框還是非模式對話框,打開後都無法關閉它們,因為程序沒有為這兩個對話框寫事件監聽器。如果主程序需要對話框裡接收的輸入值,則應該把對話框設置成模式對話框,因為模式對話框會阻塞該程序;如果把對話框設置成非模式對話框,則可能造成對話框被打開瞭,但用於並沒有操作該對話框,也沒有向對話框裡進行輸入,這就會引起主程序的異常。
Dialog類還有一個子類:FileDialog,它代表一個文件對話框,用於打開或者保存文件。FileDialog也提供瞭幾個構造器,可分別支持parent、title和mode三個構造參數,其中parent、title指定文件對話框的所屬父窗口和標題;而mode指定該窗口用於打開文件或保存文件,該參數支持如下兩個參數值:FileDialog.LOAD、FileDialog.SAVE。
FileDialog不能指定是模式對話框或非模式對話框,因為FileDialog依賴於運行平臺的實現,如果運行平臺的文件對話框是模式的,那麼FileDialog也是模式的;否則就是非模式的。
FileDialog提供瞭兩個方法來獲取被打開/保存文件的路徑
(1)getDirectory():獲取FileDialog被打開/保存文件的絕對路徑
(2)getFile():獲取FileDialog被打開/保存文件的文件名
package codes11; import java.awt.BorderLayout; import java.awt.Button; import java.awt.FileDialog; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class FileDialogTest { Frame f = new Frame("Test"); FileDialog d1 = new FileDialog(f, "選擇需要打開的文件", FileDialog.LOAD); FileDialog d2 = new FileDialog(f, "選擇需要保存文件的路徑", FileDialog.SAVE); Button b1 = new Button("打開文件"); Button b2 = new Button("保存文件"); public void init() { b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { d1.setVisible(true); System.out.println(d1.getDirectory() + d1.getFile()); } }); b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { d2.setVisible(true); System.out.println(d2.getDirectory() + d2.getFile()); } }); f.add(b1); f.add(b2, BorderLayout.SOUTH); f.pack(); f.setVisible(true); } public static void main(String[] args) { new FileDialogTest().init(); } }
運行程序,結果如下圖:
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。