黑马程序员_java GUI学习总结

    -------<a href="http://www.itheima.com/"">android培训</a>、<a   href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------

                                黑马程序员_java GUI学习总结


GUI是Java图形化用户接口,用图形的方式显示计算机操作界面与用户交互。使计算机使用操作简单直观。
与GUI相对的是CII命令行用户接口。就是常见的DOS命令。CII操作需要记住命令,十分不便,在普通用户市场已被GUI取代。

java GUI的对象都存在java.Awt与javax.Swing包中。
java.Awt   重量级组件,比较依靠平台,跨平台性较差。
javax.Swing 轻量级组件,跨平台性较强。

GUI 体系
            
   Compent
     /     |______button
          /       ______Label
      Container   ______CheckBox
  /   \     ______TextComponet
    /     \              /\
    window   panet   TextArea TextFiled
      / \
     /   \
  Frame  Dialog
           |
        FileDialog

Container体系的组件可以添加右边Button,Label等组件。

组件布局
容器中的组件排放方式就是布局。
常见布局管理器:
FlowLayout:流式布局,水平方向的线性布局。
BorderLayout: 边界式布局。  上下左右中的布局。如果没有指明方向,组件就会填充整个屏幕。
GridLayout: 网格式布局
CardLayout: 卡片式布局

常用组件及其方法
Frame 窗体组件。
setVisble(boolean b)设置窗体是否为可见。
setBounds(int x,int y,int wid,int heigh)设置组件出现在屏幕的位置和组件的大小。
add(Componet comp)向组件里添加组件。
setLayout(Layout lay) 设置组件的布局管理器。
事件监听机制
当用户用鼠标或键盘操作屏幕上的图形界面时,就会得到计算机的反馈。
而以上事件就体现了图形化界面所使用的事件监听机制。
事件监听机制的流程:
   将监听器注册到事件源上(图形组件),事件源中封装了事件,监视器中封装了触发事件产生的动作(不止一个),及事件产生后的处理方式。当外部动作作用到了事件源上,监视器就会监听到该动作的发生并自动调用该事件产生后的处理方式。
如,用户用鼠标点击(外部动作)了确定按钮(事件源)。就产生了鼠标点击事件,注册在按钮上的监视器就会监听到该动作,并自动调用鼠标点击事件的处理方式对用户做出反馈。
以下代码将会演示GUI的一些常用组件的使用及事件监听机制的代码实现。

package com.ithei.GUI;

import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.Font;
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.FileReader;
import java.io.FileWriter;

import javax.print.attribute.standard.Fidelity;

import IO.IOException;

/*
 * 本文件演示编写图形化界面做出类似记事本的软件,
 * 具有打开保存文件功能。
 */
public class loadAndSaveFile {
 //定义Ui组件
 private Frame frame;
 private MenuBar mbar;
 private Menu menu;
 private MenuItem mitemLoad, mitemSave;
 private FileDialog fileDialog;
 private TextArea textA;
 private File file;

 public loadAndSaveFile() {
  init();
 }
//初始化UI组件,并画好程序UI
 public void init() {
  frame = new Frame();
  frame.setLayout(new BorderLayout());
  frame.setBounds(300, 50, 700, 600);
  frame.setVisible(true);
  mbar = new MenuBar();
  menu = new Menu("文件");
  mitemLoad = new MenuItem("打开");
  mitemSave = new MenuItem("保存");
  menu.add(mitemLoad);
  menu.add(mitemSave);
  mbar.add(menu);
  frame.setMenuBar(mbar);
  textA = new TextArea();
  frame.add(textA);
  event();

 }
//完完成时间监听
 public void event() {
  // 给窗体添加活动监视器,主要监视关闭窗口事件。
  frame.addWindowListener(new WindowAdapter() {
   @Override
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  // 给菜单条目添加活动监视器,以便监视用户是否要打开文件。
  //将用户选中要打开的文件写到文本域中
  mitemLoad.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    FileDialog fdialog_Load = new FileDialog(frame, "打开文件",
      FileDialog.LOAD);
    fdialog_Load.setVisible(true);
    String dectory = fdialog_Load.getDirectory();
    String fileName = fdialog_Load.getFile();
    if (dectory != null || fileName != null) {
     textA.setText("");
     BufferedReader br = null;
     file = new File(dectory, fileName);
     loadFile(br);
    }
   }
   //将文件的数据写到文本域
   private void loadFile(BufferedReader br) {
    try {
     br = new BufferedReader(new FileReader(file));
     String line = null;
     while ((line = br.readLine()) != null) {
      textA.append(line + "\r\n");
     }
     textA.setFont(new Font(Font.SERIF,15,25));
    } catch (Exception ex) {

    } finally {
     if (br != null) {
      try {
       br.close();
      } catch (java.io.IOException e1) {
       // TODO Auto-generated catch block
       e1.printStackTrace();
      }
     }
    }
   }
  });
  // 给菜单条目添加活动监视器,以便监视用户是否要保存文件。
  //将文本域中的文件写到用户选中的目录中。
  mitemSave.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    if (file != null) {
     BufferedWriter bw = null;
     saveFile(bw);
    } else {
     FileDialog fdialog_Save = new FileDialog(frame, "保存文件",
       FileDialog.SAVE);
     fdialog_Save.setVisible(true);
     String dectory = fdialog_Save.getDirectory();
     String fileName = fdialog_Save.getFile();
     if (dectory != null || fileName != null) {
      file = new File(dectory, fileName);
      BufferedWriter bw = null;
      saveFile(bw);
     }
    }
   }
   //将文本域的数据写到指定到文件里。
   private void saveFile(BufferedWriter bw) {
    try {
     bw = new BufferedWriter(new FileWriter(file));
     String text = textA.getText();
     bw.write(text);
    } catch (Exception ex1) {

    } finally {
     if (bw != null) {
      try {
       bw.close();
      } catch (java.io.IOException e1) {
       // TODO Auto-generated catch block
       e1.printStackTrace();
      }
     }
    }
   }
  });
 }

 public static void main(String[] args) {
  loadAndSaveFile las = new loadAndSaveFile();
 }

}

从上面代码可以总结几点
窗体事件及其事件监听处理方式
添加事件监听器的方法   addWindowLister(WindowLister w)
由于参数WindowLister接口中的抽象方法很多,实现起来很麻烦。可以实现其子类 WindowAdapter。

菜单的实现
菜单是一个常用的组件,实现方式如下
在MenuBar(菜单框架)中添加Menu(菜单)用add方法添加。
Menu中可以添加Menu和MenuItemt同样用add方法。
而向Container 组件添加MenuBar,则要用setMenuBar方法.

文件对话框
 该组件是用于帮助用户打开或保存文件时启用的对话框。其构造函数中的模式需注意
FileDialog(Frame parent,String title,int model)
当模式为:FileDialog.LOAD 为打开文件对话框。
当模式为:FileDialog.SAVE 为保存文件对话框。
重要方法:
String  getDirectory()  获取用户在文件对话框中选择的文件目录(文件夹)
String getFile()      获取用户在文件对话框中选择的文件名。

  -------<a href="http://www.itheima.com/"">android培训</a>、<a   href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值