黑马程序员_<<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();
 
  }
 
}


结果:

 






 

 

 

 

 


 

posted on   you Richer  阅读(208)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示