zoukankan      html  css  js  c++  java
  • 黑马程序员_<<GUI(图形用户管理)-----2>>

    --------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------


    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("
    ");
     
          }
        } 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 + "
    ");
               }
               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();
     
      }
     
    }


    结果:






     --------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------


  • 相关阅读:
    11.29 两百字
    Django:基础知识
    deepdiff:对比文件
    openpyxl:二次封装
    openpyxl:openpyxl的随笔
    web:pykeyboard、pymouse得使用
    Jmeter:如何让线程顺序执行
    Jmeter:如何将上一个线程得变量使用到下一个线程中,将上一个线程变量设置为全局变量
    Jmeter:BeanShell中的vars.put(string,string)
    Jmeter:数据库查询当天的日期
  • 原文地址:https://www.cnblogs.com/riskyer/p/3357873.html
Copyright © 2011-2022 走看看