.Net转Java自学之路—基础巩固篇十六(GUI)

GUI

  图形化用户界面。Graphical User Interface 图形用户接口

  CLI:Command line User Interface 命令行用户接口;常见的DOS命令行操作

  Java为GUI提供的对象都存在Java.AWT、Java.Swing包中。

  AWT:Abstrace Window ToolKit  抽象窗口工具包;需调用本地系统方法实现功能。属于重量级控件。

  Swing:在AWT的基础上,建立了一套图形界面系统。增强了移植性,属于轻量级控件。

   AWT体系中 Component 类为基类。Container 为容器,是一个特殊组件,该组件中可以通过add添加其他组件。

  常见的布局有:

    FlowLayout:流式布局;从左到右的顺序排列。Panel默认的布局

    BorderLayout:边界布局;东、南、西、北、中。是Frame默认的布局

    GridLayout:网格布局;规则的矩形

    CardLayout:卡片布局;选项卡

    GridBagLayout:网格包布局;非规则矩形

  事件监听机制:

    1、事件源:就是被操作的组件。

    2、事件:会发生的一些事情。

    每一个事件的发生,有可能对应的动作有很多。将这些动作与事件源关联起来即可。只要有一个动作发生,就可以引发对应的事件。但是多个动作直接和事件源关联,不利于应用和扩展。所以,将这些动作封装成一个对象。让对象与事件源关联即可。该封装后的对象就形象的称为监听器。

    监听器和事件源相关联,当有外部动作作用到该事件源时,监听器就会自动判断这个动作,若该动作符合监听中的某个动作,那么,监听动作所对应的事件就会发生,该事件会被封装成一个事件对象,并传递给正在发生的这个动作,该动作其实就是一个函数;这个函数会执行并对事件进行处理。

    窗体事件监听的接口:WindowListener 处理窗口事件的类要么实现此接口所有的方法;要么扩展抽象类WindowAdapter 重新需要的方法。

    方法包含有:

      windowActiveted(WindowEvent e);活动Window时发生。

      windowClosed(WindowEvent e);调用dispose而将其关闭时发生。

      windowClosing(WindowEvent e);从窗口的系统菜单中关闭窗口时发生。

      windowDeactiveated(WindowEvent e);不再是活动窗体时发生。

      windowDeiconified(WindowEvent e);最大化。

      windowIconified(WindowEvent e);最小化。

      windowOpened(WindowEvent e);首次加载时发生。

    监听接口中,只要方法没有超过3个,该接口就没有适配器Adapter 。一般都有适配器。活动监听是没有适配器的。

    活动监听:

      按钮添加的都是活动监听。包括:按钮 button、菜单 menu 等。

      addActionListener();添加活动监听

        ActionListener();包含有一个方法:actionPerformed(ActionEvent e);

    键盘监听:

      addKeyListener();添加键盘监听

        适配器KeyAdapter()包含有三个方法:

          keyPerssend(KeyEvent e);按下时发生。

          keyReleased(KeyEvent e);释放键时发生。

          keyReleased(KeyEvent e);输入某个键时发生。

    鼠标监听:

      addMouseListener();鼠标监听

        鼠标适配器MouseAdapter() 包含有五个方法:

          mouseClicked(MouseEvent e);单击时发生

          mouseEntered(MouseEvent e);鼠标进入时发生

          mouseExited(MouseEvent e);鼠标离开时发生

          mousePressed(MouseEvent e);按下时发生

          mouseReleased(MouseEvent e);释放时发生

实例:基本功能简述

Frame f=new Frame("窗体名称");
f.setSize(with,height);//设置窗体大小
f.setLocation(x,y);//窗体出现屏幕的位置
//
f.setBound(x,y,with,height);//设置窗体大小,直接指定位置
f.setLayout(new FlowLayout());//设置布局方式

Button btn=new Button("按钮名称");//创建按钮
f.add(btn);//按钮添加到窗体

f.addWindowListener(new 监听事件());//addWindowListener()给窗体添加监听器。
//括号中new的监听器对象可以是继承WindowAdapter的自定义的监听器也可以是WindowAdapter 。例:class ClassName extends WindosAdapter{ }
//或 使用匿名内部类 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);//关闭对话框 } }); //按钮添加活动监听事件 注:按钮不能添加窗体监听事件 btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //Code...... } }); //键盘监听事件 btn.addKeyListener(new KeyAdapter(){ public void keyPerssend(KeyEvent e){ e.getKeyChar();//键的字符 e.getKeyCode();//键的哈希值 KeyEvent.getKeyText(e.getKeyCode());//键的文本(键盘上的字符)。 //组合键 e.isAltDown();//Alt键是否按下 e.isAltGraphDown(); e.isConsumed();//是否已经使用此事件 e.isControlDown();//Ctrl键是否按下 e.isShiftDown();//Shift键是否按下 } }); TextField tf=new TextField(10);//文本框 f.add(tf); //定义文本框只能输入数字 tf.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ int code=e.getKeyCode(); if(!(code>=KeyEvent.CK_0 && code<=KeyEvent.VK_9)) e.consume();//取消事件默认处理效果;取消输入效果 } }); //Dialog 对话/提示框。Dialog 可以添加窗体事件监听 Dialog d=new Dialog(f,"提示框标题",false);//false:可以不关闭提示框的情况下操作主界面;true:必须关闭提示框才能操作主界面。 d.setSize(with,height);//大小 Lable lb=new Lable();//标签 d.add(lb);//给提示框添加文本内容 d.add(btn);//给提示框添加按钮 d.setText("提示信息"); d.setVisible(true);//弹出提示框 FileDialog fd=new FileDialog();//文件对话框 fd.setTitle("文件对话框标题"); fd.setMode(FileDialog.LOAD);//选中文件加载 fd.setMode(FileDialog.SAVE);//文件写入 fd.setVisible(true); fd.getDirectory();//获取文件对话框的目录 fd.getFile();//获取此文件对话框的选中文件 fd.getFilenameFilter();//确定此文件对话框的文件名过滤器 fd.setDirectory(path);//文件对话框窗口目录设置为指定目录 fd.setFile(strfile);//文件对话框选定文件设置为指定文件 fd.filenameFilter();//文件对话框的文件名过滤器设置为指定过滤器 f.setVisible(true);//窗体显示与否

菜单系列:

  MenuComponent    extends Object

    >>Menubar:菜单栏

    >>MenuItem:菜单项

      >>>Menu:菜单

import java.awt.*;
import java.awt.event.*;

class ClassName{
    private Frame f;
    private Menubar bar;
    private MenuItem mi,childMi;
    private Menu m,childM;

    ClassName(){
        init();
    }

    public void init(){
        f=new Frame("窗体标题");
        f.setBount(x,y,with,height);
        bar=new Menubar();
        m=new Menu("菜单名");
        mi=new MenuItem("菜单项名称");

        childM=new Menu("子菜单");
        childMi=new MenuItem("子菜单 菜单项名称");

        childM.add(childMi);//子菜单
        m.add(childM);

        m.add(mi);
        bar.add(m);

        f.setMenubar(bar);

        f.setVisible(true);
    }

    private void event(){
        //一系列的事件监听Code...
    }
}

打Jar包:

  javac -d . 包名.java  将执行文件打包到当前目录“包名”文件夹下

  jar -cvf my(jar包名).jar 包名  将包中的执行文件打jar包

  当前打jar包的方式在配置文件中没有指定执行文件是那个类文件;故、需要新建一个清单信息文件,可以是任意文件。清单信息文件内容是固定格式的信息内容:

  格式:

    Main-Class: 包名.类名  (后要有回车键表示结束)

  包名前面需要有一个空格,否则会报IO异常:invalid header field (无效标头字段名称)

  类名后面需要有一个回车键表示结束,否则配置文件中会没有指定执行文件配置信息。

  在打Jar 包时需读取清单信息文件内容,命令行变为:

  jar -cvfm my(jar包名).jar 清单信息文件名 包名

 

posted @ 2018-11-28 23:28  水痕灬  阅读(224)  评论(0编辑  收藏  举报