[疯狂Java笔记]AWT:Dialog对话框类、FileDialog文件对话框

本文详细介绍了Java AWT中的Dialog对话框类和FileDialog文件对话框。Dialog是Window的子类,作为交互窗口,可以是模态或非模态,通常有父窗口,且必须为Frame。FileDialog提供了打开和保存文件的功能,根据模式不同显示组件会有所变化。用户点击OK后,可通过getDirectory和getFile获取文件路径和名称。FileDialog内部处理了各种异常情况,简化了程序员的工作。
摘要由CSDN通过智能技术生成

1. 创建对话框:

   1) Dialog是Window的子类,属于特殊容器,用于和用户交互,必定要实现事件监听和处理的接口;

   2) Dialog是一种可以独立存在的顶级窗口,当然通常都是具有父窗口的(即依赖于其他窗口产生),但Dialog的父窗口必须是Frame,这是规定好的;

   3) 构造器:Dialog(Frame owner, String title, boolean modal);

        i. owner:即父窗口,其上级窗口(打开它的窗口),如果指定为null则表示该对话框是顶级窗口,像桌面计算器就属于这种类型;

        ii. title:标题

        iii. modal:true为模态对话框,false为非模态对话框

!!模态对话框总是位于上级窗口之上,其关闭前上级窗口无法获得焦点,非模态则可以;

    4) 示例:Frame中的两个按钮分别打开两种对话框

public class AwtTest {

	public static void main(String[] args) {
		Frame f = new Frame("Dialog Test");
		
		Dialog dlgModal = new Dialog(f, "Modal Dialog", true);
		Dialog dlgNonModal = new Dialog(f, "Non-modal Dialog", false);
		Button btnModal = new Button("Modal");
		Button btnNonModal = new Button("Non Modal");
		
		dlgModal.setBounds(20, 30, 300, 400);
		dlgNonModal.setBounds(100, 200, 300, 400);
		
		btnModal.addActionListener(e -> dlgModal.setVisible(true));
		btnNonModal.addActionListener(e -> dlgNonModal.setVisible(true));
		
		f.add(btnModal);
		f.add(btnNonModal, BorderLayout.SOUTH);
		
		f.pack();
		f.setVisible(true);
	}

}

!!如果主程序需要接受用户在对话框中输入的值则应该将对话框设置成模态对话框,因为在用户输入时有可能会切换到其它窗口,而模态对话框能阻塞这种行为,如果输入了一般切出去了可能会造成主程序异常;


2. FileDialog——文件对话框:

    1) 即用于打开或保存文件的对话框,是操作系统提供的常用功能,而AWT则包装了这一功能;

    2) 构造器:FileDialog(Frame parent, String title, int mode); 

         i. parent当然还是所属的父窗口了,既然FileDialog也是对话框的一种,那么其父窗口也必须是Frame;

         ii. title是标题;

         iii. mode在这里不是模态或非模态了,而是指定该文件对话框的功能,只有两种,一种是打开文件,一种是保存文件,由FileDialog的两个静态常量决定:LOAD(打开文件)、SAVE(保存文件),不同模式下显示的画面(组件等)不太一样;

!!那么文件对话框到底是模态还是非模态的呢?文件对话框依赖运行平台的,因此操作系统中支持的文件对话框是什么模式那么它就表现出什么模式;

    3) 获取对话框中选中或保存的文件的路径和名称:

         i. 主要运用FileDialog提供的两个方法获取,一个是getDirectory,一个是getFile;

         ii. String getDirectory(); // 返回目标文件的绝对路径(不包括文件名)

         iii. String getFile(); // 返回目标文件的名称(不包含路径,但包含后缀)

         iv. 因此要获取完整的绝对路径名应该将上述两个返回值相加;

!!获取这些信息的时机:只有到用户按了对话框的OK按钮关闭对话框后这两个方法才会返回结果!!

!!FileDialog内部已经解决了所有琐碎的细节,比如按OK的时候检查文件是否重复、是否存在等,如果出现异常会弹出消息框提示等等,这些都不需要程序员关心,都是自动的;

    4) 示例:

public class AwtTest {

	public static void main(String[] args) {
		Frame f = new Frame("FileDialog Test");
		
		FileDialog d1 = new FileDialog(f, "Open File", FileDialog.LOAD);
		FileDialog d2 = new FileDialog(f, "Save File", FileDialog.SAVE);
		
		Button b1 = new Button("Open");
		Button b2 = new Button("Save");
		
		b1.addActionListener(e -> {
			d1.setVisible(true);
			System.out.println(d1.getDirectory() + d1.getFile());
		});
		b2.addActionListener(e -> {
			d2.setVisible(true);
			System.out.println(d2.getDirectory() + d2.getFile());
		});
		
		f.add(b1);
		f.add(b2, BorderLayout.SOUTH);
		
		f.pack();
		f.setVisible(true);
	}

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值