黑马程序员_<<GUI(图形用户管理)-----2>>
8.对话框
对列出目录内容增加了对话框提示,当输入不正确的路径后,报出异常,用对话框提示。同时当点击转到也能执行,或者是按回车键。
自定义类,定义了对话框。
package www.fuxi.GUI; import java.awt.Button; import java.awt.Dialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* * 自定义异常的对话框*/ public class MyFindDialog { private Frame ff; private Dialog dialog; private String path; private Button okBu; private Label info; public MyFindDialog(Frame ff, String path) { this.dialog = dialog; this.path = path; init(); } public void init() { dialog = new Dialog(ff, "提示信息", true);// 设置对话框,true,为如果对话框不消失,那么就不能操作其他的 info = new Label("您输入的路径:" + path + "不存在"); okBu = new Button("确定"); dialog.setLocation(300, 200);// 位置 dialog.setLayout(new FlowLayout());// 设置布局 String textPath=info.getText();//为了,是对话框更形象 byte []text=textPath.getBytes(); dialog.setSize(text.length*20,100); dialog.add(info); dialog.add(okBu); myEvent(); dialog.setVisible(true);// 可见 } private void myEvent() { dialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dialog.setVisible(false);// 不可见 } }); okBu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dialog.setVisible(false);// 不可见 } }); } } import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; public class DirDemo { private Frame ff;// 窗体 private TextField text;// 文本框 private Button bu;// Button private TextArea area;// 文本区域 public DirDemo() { init(); } /* 初始化方法 */ public void init() { /* 窗体设置 */ ff = new Frame("查看目录列表"); ff.setSize(400,500);// 设置大小 ff.setLocation(300,200);// 设置位置 ff.setLayout(new FlowLayout());// 设置布局 /* TextField设置 */ text = new TextField(40);// 初始化的时候指定列 ff.add(text);// 添加到窗体上 /* Button设置 */ bu = new Button("转到"); ff.add(bu);// 添加到窗体上 /* TextArea 设置 */ area = new TextArea(20, 50); ff.add(area);// 添加到窗体上 myEvent(); ff.setVisible(true);// 设置显示 } /* 监听器和事件 */ public void myEvent() { /* 设置窗体监听器 */ ff.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {// 关闭事件 System.out.println("窗体关闭"); System.exit(0); } }); /* 设置Button的监听器 */ bu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {// 活动事件 showDir(); } }); /* 对文本框设置键盘监听器,当点击回车后,和Button的功能一样 */ text.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) {// 按下事件 if (e.getKeyCode() == KeyEvent.VK_ENTER) showDir(); } }); } /* 把查看目录内容功能抽取出来,可以是用键盘监听器事件调用,也可以Button监听 */ private void showDir() { String url = text.getText();// 或得TextField中的信息 area.setText(""); File dir = new File(url); int count = 0; if (dir.isDirectory()) { String[] fileNames = dir.list(); for (String name : fileNames) { count++; area.append((new Integer(count)).toString() + ":-"); area.append(name); area.append("\r\n"); } } else { new MyFindDialog(ff, url);// 自定义的处理路径异常的对话框 } text.setText(""); } public static void main(String[] args) { new DirDemo(); } }
9.记事本
1. 用到了菜单类:MenuBar,Menu,MenuItem,他们之间的关系见下图
2. 用到了文件对话框,打开和保存,FileDialog,可以设置模式,打开和保存。
3. 监听器
4. 流操作
package www.fuxi.GUI; import java.awt.FileDialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /*记事本菜单功能下显示*/ public class MenuDemo { private Frame frame; private MenuBar bar;// 菜单栏可以里面添加 Menu, private Menu Filemenu, ChildMenu;// 菜单例如:文件,编辑可以向里面添加MenuItem private MenuItem OpenItem, CloseItem, SaveItem;// 菜单选项 // 可以在选项里面添加菜单,这样就是子菜单,也可以添加到Menu中 private FileDialog OpenFileDialog, SaveFileDialog;// 菜单对话框,可以是打开或者是保存。FileDialog.LOAD打开 // FileDialog.SAVE保存 private TextArea area;// 文本区域 private File file;// 文件 public MenuDemo() { init(); } public void init() { frame = new Frame("MY-MENU"); frame.setBounds(300, 100, 500, 600);// 设置位置和大小 // 布局默认是边界布局,这样可以不用调整文本区域的大小 bar = new MenuBar();// 菜单栏 Filemenu = new Menu("文件");// 文件菜单 OpenItem = new MenuItem("打开");// 打开选项 SaveItem = new MenuItem("保存");// 保存选项 CloseItem = new MenuItem("关闭");// 关闭选项 ChildMenu = new Menu("在菜单");// 子菜单 /* 向子菜单上添加选项 */ ChildMenu.add(new MenuItem("子选项")); // 将菜单选项添加到菜单上 Filemenu.add(ChildMenu);// 将子菜单添加到文件菜单下 Filemenu.add(OpenItem); Filemenu.add(SaveItem); Filemenu.add(CloseItem); // 将菜单添加到菜单栏上 bar.add(Filemenu); // 将菜单栏添加到窗体上 frame.setMenuBar(bar); // 设置可见窗体 MyEven(); area = new TextArea();// 文本区域 frame.add(area); frame.setVisible(true); } /* 监听器和事件 */ public void MyEven() { /* 窗体监听器 */ frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {// 关闭事件 System.exit(0); } }); /* 退出监听器,在退出选项上添加 */ CloseItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {// 活动事件 System.exit(0); } }); /* 打开设置监听器,当打开时,出现打开对话框 */ OpenItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {// 打开事件 OpenFileDialog = new FileDialog(frame, "打开文件", FileDialog.LOAD);// 打开对话框 OpenFileDialog.setVisible(true);// 显示 String dirPath = OpenFileDialog.getDirectory();// 获取文件路径 String fileName = OpenFileDialog.getFile();// 获取文件名称 /* 文件不存在,则返回,不执行 */ if (dirPath == null || fileName == null) { return; } area.setText("");// 初始化文本区域 file = new File(dirPath, fileName);// 定义文件 try { BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while ((line = br.readLine()) != null) { area.append(line + "\r\n"); } br.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException ex) { } } }); /* 保存监听器 */ SaveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SaveFileDialog = new FileDialog(frame, "保存文件", FileDialog.SAVE);// 保存对话框 if (file == null) {// 如果不存在就创建一个此文件,弹出保存对话框,如果存在就不需要创建,不必弹出保存对话框 SaveFileDialog.setVisible(true);// 显示 String dirPath = SaveFileDialog.getDirectory();// 获取文件路径 String fileName = SaveFileDialog.getFile();// 获取文件名称 /* 文件不存在,则返回,不执行 */ if (dirPath == null || fileName == null) { return; } file = new File(dirPath, fileName);// 定义文件 } try { BufferedWriter bw = new BufferedWriter(new FileWriter(file)); String content = area.getText(); bw.write(content);// 写入流中 bw.flush();// 刷新 bw.close();// 这里也会刷新,前面的刷新也可以不写 } catch (IOException e1) { e1.printStackTrace(); } } }); } public static void main(String[] args) { new MenuDemo(); } }
结果: