Java?awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)方式
Java awt-對(duì)話框簡(jiǎn)單實(shí)現(xiàn)
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(對(duì)話框)學(xué)習(xí)
Dialog是Window類的子類,是一個(gè)容器類,屬于特殊組件。對(duì)話框是可以獨(dú)立存在的頂級(jí)窗口,因此用法與普通窗口的用法幾乎完全一樣。
對(duì)話框有如下兩點(diǎn)需要注意
(1)對(duì)話框通常依賴于其他窗口,就是通常有一個(gè)parent窗口
(2)對(duì)話框有非模式(non-modal)和模式(modal)兩種,當(dāng)某個(gè)模式對(duì)話框被打開之后,該模式對(duì)話框總是位于它依賴的窗口之上;在模式對(duì)話框被關(guān)閉之前,它依賴的窗口無法獲得焦點(diǎn)
對(duì)話框有多個(gè)重載構(gòu)造器
它的構(gòu)造器可能有如下3個(gè)參數(shù):
(1)owner:指定該對(duì)話框所依賴的窗口,既可以是窗口,也可以是對(duì)話框。
(2)title:指定該對(duì)話框的窗口標(biāo)題
(3)modal:指定該對(duì)話框是否是模式的,true貨false
/** * 程序示范了模式對(duì)話框和非模式對(duì)話框的用法 */ 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("測(cè)試"); Dialog d1 = new Dialog(f, "模式對(duì)話框", true); Dialog d2 = new Dialog(f, "非模式對(duì)話框", false); Button b1 = new Button("打開模式對(duì)話框"); Button b2 = new Button("打開非模式對(duì)話框"); 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(); } }
上面程序創(chuàng)建了d1和d2兩個(gè)對(duì)話框,其中d1是一個(gè)模式對(duì)話框,而d2是一個(gè)非模式對(duì)話框(兩個(gè)對(duì)話框都是空的)。該窗口中還提供了兩個(gè)按鈕,分別用于打開模式對(duì)話框和非模式對(duì)話框。打開模式對(duì)話框后鼠標(biāo)無法激活原來的”測(cè)試窗口“;但打開非模式對(duì)話框后還可以激活原來的”測(cè)試窗口“。
運(yùn)行程序,結(jié)果如下圖:
不管是模式對(duì)話框還是非模式對(duì)話框,打開后都無法關(guān)閉它們,因?yàn)槌绦驔]有為這兩個(gè)對(duì)話框?qū)懯录O(jiān)聽器。如果主程序需要對(duì)話框里接收的輸入值,則應(yīng)該把對(duì)話框設(shè)置成模式對(duì)話框,因?yàn)槟J綄?duì)話框會(huì)阻塞該程序;如果把對(duì)話框設(shè)置成非模式對(duì)話框,則可能造成對(duì)話框被打開了,但用于并沒有操作該對(duì)話框,也沒有向?qū)υ捒蚶镞M(jìn)行輸入,這就會(huì)引起主程序的異常。
Dialog類還有一個(gè)子類:FileDialog,它代表一個(gè)文件對(duì)話框,用于打開或者保存文件。FileDialog也提供了幾個(gè)構(gòu)造器,可分別支持parent、title和mode三個(gè)構(gòu)造參數(shù),其中parent、title指定文件對(duì)話框的所屬父窗口和標(biāo)題;而mode指定該窗口用于打開文件或保存文件,該參數(shù)支持如下兩個(gè)參數(shù)值:FileDialog.LOAD、FileDialog.SAVE。
FileDialog不能指定是模式對(duì)話框或非模式對(duì)話框,因?yàn)镕ileDialog依賴于運(yùn)行平臺(tái)的實(shí)現(xiàn),如果運(yùn)行平臺(tái)的文件對(duì)話框是模式的,那么FileDialog也是模式的;否則就是非模式的。
FileDialog提供了兩個(gè)方法來獲取被打開/保存文件的路徑
(1)getDirectory():獲取FileDialog被打開/保存文件的絕對(duì)路徑
(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(); } }
運(yùn)行程序,結(jié)果如下圖:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決mapstruct在eclipse生成不了mapper的實(shí)現(xiàn)類問題
這篇文章主要介紹了解決mapstruct在eclipse生成不了mapper的實(shí)現(xiàn)類問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Java 實(shí)戰(zhàn)項(xiàng)目錘煉之在線蛋糕商城系統(tǒng)的實(shí)現(xiàn)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+jdbc+mysql實(shí)現(xiàn)一個(gè)在線蛋糕商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11基于JDK8-lambda表達(dá)式四種forEach性能對(duì)比
這篇文章主要介紹了基于JDK8-lambda表達(dá)式四種forEach性能對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java實(shí)現(xiàn)簡(jiǎn)單的socket通信教程
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單的socket通信教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12java程序員必會(huì)的遠(yuǎn)程debug教程
這篇文章主要為大家介紹了java程序員必會(huì)的遠(yuǎn)程debug教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Base64加解密的實(shí)現(xiàn)方式實(shí)例詳解
這篇文章主要介紹了Base64加解密的實(shí)現(xiàn)方式實(shí)例詳解的相關(guān)資料,這里提供了實(shí)現(xiàn)實(shí)例,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08