.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 清单信息文件名 包名