----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
图形用户界面GUI
GUI
Graphical User Interface(图形用户接口)
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI
Command User Interface(命令行用户接口)
就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。
举例:创建删除文件夹等
java为GUI提供的对象,都存在java.Awt和java.Swing两个包中。
Awt与Swing
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。 属于重量级组件。依赖于系统。
java.Swing:在Awt基础上建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现。
增强了移植性,属轻量级实现。
另外还有IBM的Swt包
继承关系图
布局管理器
容器中的组件的排列方式,就是布局。
常见布局管理器:
FlowLayout(流式布局管理器)从左到右排列,Panel默认时的布局管理器。
BorderLayout(边界布局管理器)东南西北中,Frame默认的布局管理器。
GridLayout(网格布局管理器)规则的矩阵
CardLayout(卡遍布局管理器)选项卡
GridBagLayout(网个包布局管理器)非规则的矩阵,一个组件可能占用多个网格。
一个Fram中组件如果有多重布局,使用不同布局的面板Panel来填充Frame。
创建图形化界面
1.创建frame窗体。
2.对窗体进行基本设置。
比如大小,位置,布局。
3.定义组件
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示,通过setVisible(true)方法。
import java.awt.*; import java.awt.event.*; /** 使用流布局管理器。 */ class MyFrame { //定义组件 Frame frame; Label l1,l2,l3; TextField tf1,tf2,tf3,tf4; Button but; //构造函数初始化窗体 MyFrame() { init(); } public void init() { //设置窗体及组件 frame=new Frame("我的绩点"); frame.setBounds(300,100,270,300); frame.setLayout(new FlowLayout()); l1=new Label("语文"); l2=new Label("数学"); l3=new Label("英语"); but=new Button("绩点"); tf1=new TextField(25); tf2=new TextField(25); tf3=new TextField(25); tf4=new TextField(25); //添加组件 frame.add(l1); frame.add(tf1); frame.add(l2); frame.add(tf2); frame.add(l3); frame.add(tf3); frame.add(but); frame.add(tf4); // 让窗体显示 frame.setVisible(true); } } /* 测试窗体 */ public class FrameTest { public static void main(String[] args) { new MyFrame(); } }
事件监听机制
当注册了监听器的事件源触发了监听器所监听的时间后,就会把事件对象传递给监听器进行处理。
事件监听机制的特点
1.事件源
2.事件
3.监听器
4.事件处理
事件源:awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发的事件封装的对象。
以上三者,在java中都已经被定义。直接获取其对象就可以使用。
我们要做的事情是对产生的动作进行处理。
常见监听器
窗体监听器WindowListener
按钮监听器ActionListener
常见事件对象
窗体事件WindowEvent
按钮事件ActionEvent
窗体事件
窗体事件监听首先要注册监听器,
窗体Window的addWindowListener(WindowListener l)方法可以给指定窗口注册监听器。
需要WindowListener类型的参数,WindowListener是一个接口,
实现WindowListener接口需要实现它的七个抽象方法。
而实际上我们经常只需要用到其中的某一个或某几个方法,
这就需要使用WindowListener抽象子类WindowAdapter窗体适配器,
它实现了WindowListener所有方法,方法体为空。
我们只要创建匿名内部类覆盖某一个我们需要使用的方法实现自己特有处理方式。
关闭窗体
addWindowListener(new WindowAdapter() { public void WindowClosing() { System.exit(0); } });
Action事件
对一个按钮事件进行监听
b =new Button(); //添加一个具备程序推出功能的按钮 b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } });
共性事件
鼠标事件和键盘事件
鼠标事件和键盘事件都是共性事件,所有组件都支持的事件。
鼠标事件
MouseListener 鼠标监听器
MouseAdapter 鼠标监听适配器
MouseEvent 鼠标事件
判断鼠标双击
addMouseListener(new MouseAdapter() { public void mouseCliked(MouseEvent e) { if(e.getClikCount()==2) System.out.println("鼠标双击"); } });
键盘事件
KeyListener 键盘监听器
KeyAdapter 键盘监听适配器
KeyEvent 键盘事件
addkeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ESCAPe) System.exit(0); //如果判断两个键是否同时按下 if(e.isControlDown()&&e.getKeCode()==KeyEvent.VK_ESCAPE) System.out.println("ctrl+enter isrun"); System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode()); } });
文本框添加键盘事件
TextField tf=new TextField(20); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int code=e.getKeyCode(); if(!(code>=KeyEvent.VK_0&&code<KeyEvent.VK_9)) { System.out.println("非法"); e.cosume();//屏蔽默认处理方式,如果不是数字不会添加到文本框中。 } } });
代码示例 :类似记事本功能的软件,实现GUI界面以及打开保存功能。
/** @author 何竹冬 @version 1.0 @date 2012/12/24 需求:类似记事本功能的软件,实现GUI界面以及打开保存功能。 */ package cn.itheima.javabase; import java.awt.*; import java.awt.event.*; import java.io.*; public class MyText { //定义组件信息 private Frame frame; private MenuBar menuBar; private Menu fileMenu; private MenuItem openItem,saveItem,closeItem; private TextArea textArea; private FileDialog openDialog,saveDialog; private File file; MyText() { init(); } /** 初始化界面 */ public void init() { frame=new Frame("我的记事本"); frame.setBounds(300,100,500,600); menuBar=new MenuBar(); fileMenu=new Menu("文件"); openItem=new MenuItem("打开"); saveItem=new MenuItem("保存"); closeItem=new MenuItem("退出"); textArea=new TextArea(); saveDialog=new FileDialog(frame,"save",FileDialog.SAVE); openDialog=new FileDialog(frame,"open"); menuBar.add(fileMenu); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); frame.setMenuBar(menuBar); frame.add(textArea); myEvent(); frame.setVisible(true); } /** 窗体及组件事件 */ private void myEvent() { //窗体事件监听 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) { openDialog.setVisible(true); String dir=openDialog.getDirectory(); String name=openDialog.getFile(); if(dir==null||name==null) return; textArea.setText(""); file=new File(dir,name); read2File(file); } }); //保存条目事件监听 saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(file==null) { System.out.println("file is null"); saveDialog.setVisible(true); String dir=saveDialog.getDirectory(); String name=saveDialog.getFile(); if(dir==null||name==null) return; System.out.println("save"); file=new File(dir,name); } write2File(file); } }); } /** 读取文件数据 */ private void read2File(File file) { BufferedReader br=null; try { br=new BufferedReader(new FileReader(file)); String line=null; while((line=br.readLine())!=null) { textArea.append(line+"\r\n"); } } catch (IOException ex) { throw new RuntimeException("读取失败"); } finally { try { if(br!=null) br.close(); } catch (IOException ex) { throw new RuntimeException(); } } } /** 保存文件(写入文件数据) */ private void write2File(File file) { BufferedWriter bw=null; try { bw=new BufferedWriter(new FileWriter(file)); String text=textArea.getText(); System.out.println(text); bw.write(text); } catch (IOException ex) { throw new RuntimeException("写入失败"); } finally { try { if(bw!=null) bw.close(); } catch (IOException ex) { throw new RuntimeException(); } } } /** 主函数:创建一个窗体 */ public static void main(String[] args) { new MyText(); } }
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
相关推荐
黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件).zip
Java_GUI图形化用户界面编程的基础知识
python初级界面gui简单布局
python项目源码_实例61_Python制作图形用户界面(GUI)让操作可视化.rar
第七章 GUIDE入门 7.1 概述 7.2 图形句柄入门 7.3 GUIDE工具入门 7.4 创建图形用户界面外观 7.5 图形用户界面编程 7.6 常用的图形界面函数 7.7 本章小结
Python项目源码61_Python制作图形用户界面(GUI)让操作可视化.rar
GUI界面,用于设计友好的图形用户界面,以便能为用户提供方便。
资源名:行时域频域处理_通过变频、变速达到变声目的_用图形用户界面(GUI)_时域频域图形输出_前后波形进行比较_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的...
MATLAB_GUI图形用户界面,用于用户使用MATLAB操作,编辑界面,实现功能
用于GUI图形用户界面设计学习,文字简单易懂,有利于自学,可快速掌握MATLAB_GUI图形用户界面设计。
图形用户界面(gui)是通过窗口、图标、按钮、菜单、文本等图形对象构成用户界面
GUI 图形化用户界面 彩屏LCD的程序
GUI界面的边缘检测代码,可以帮助了解GUI界面的简单应用
支持向量机实现分类识别,带有图形用户界面,有测试数据以及具体使用说明。
掌握和精通matlab之gui设计\图形用户界面(GUI)制作,Matlab的gui虽然简单,但有时候还是有些用处的
要求在一个界面内至少显示5道选择题,每道题4个选项。另有2个命令按钮,分别为“重新答题”(全部选项及正确答题数清空)和“提交”(计算),在按钮下方的标签内显示最终的正确的题目数。界面大致布局如下:
MATLAB摄像头的基础操作、Gui界面
MATLAB 界面编程 图像处理的程序GUI界面实例
原用于图像识别的对象类UI界面,可实现循环显示,但会占用一定内存资源,供参考
Python 第三方组件Tkinter实现图形界面化