------- android培训、java培训、期待与您交流! ----------

GUI(图形用户界面)

1、基本概念:

GUI:Graphical User Interface(图形用户接口)。用图形的方式,来显示计算机操作的界面,这样更方便更直观。

CLI:Command line User Interface (命令行用户接口)。就是常见的Dos命令行操作。需要记忆一些常用的命令,操作不直观。

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

2、Awt与Swing

java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。

javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全 由Java实现。增强了移植性,属轻量级控件。

3、继承关系图

4、布局管理器

容器中的组件的排放方式,就是布局。

常见的布局管理器:

FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。

BorderLayout(边界布局管理器):东,南,西,北,中(未指定位置的话,将最大面积填充)。Frame默认的布局管理器。

GridLayout(网格布局管理器)规则的矩阵

CardLayout(卡片布局管理器)选项卡

GridBagLayout(网格包布局管理器)非规则的矩阵

最牛的就是坐标式布局,想放哪里就放哪里。

5、建立一个简单的窗体

Container常用子类:Window Panel(面板, 不能单独存在。)

Window常用子类:Frame Dialog

创建图形化界面:

1,创建frame窗体。

2,对窗体进行基本设置。

比如大小,位置,布局。

3,定义组件。

4,将组件通过窗体的add方法添加到窗体中。

5,让窗体显示,通过setVisible(true)

import java.awt.*;
import java.awt.event.*;
class  AwtDemo
{public static void main(String[] args){Frame f = new Frame("my awt");f.setSize(500,400);//设置窗体横、纵尺寸。f.setLocation(400,200);//设置窗体位置:距离左边400,上边200。f.setLayout(new FlowLayout());//流式布局。f.setVisible(true);//显示窗体。}
}

6、事件监听机制

组成:

事件源(组件):就是awt包或者swing包中的那些图形界面组件。

事件(Event):每一个事件源都有自己特有的对应事件和共性事件。

监听器(Listener):将可以出发某一个事件的动作(不止一个动作)都已经封装到了监听器中。

事件处理(引发事件后处理方式)

确定事件源(容器或组件)

通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

一般用匿名内部类来表示。

在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

事件触发后会把事件打包成对象传递给该变量。(其中包括 事件源对象。通过getSource()或者,getComponent()获取。)

活动监听部分代码:

f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.out.println("我关!");System.exit(0);}public void windowActivated(WindowEvent e){System.out.println("我活了!!");}public void windowOpened(WindowEvent e){System.out.println("我被打开了,哈哈哈");}});

-------------------------------------------------

实例代码:

通过按钮关闭窗体。在窗体中通过按钮创建按钮。

import java.awt.*;
import java.awt.event.*;
class FrameDemo
{//定义该图形中所需的组件的引用。private Frame f;private Button but;FrameDemo(){init();}public void init(){f = new Frame("my frame");//对frame进行基本设置。f.setBounds(300,100,500,400);//设置frame的 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。f.setLayout(new FlowLayout());but = new Button("my button");//将组件添加到frame中f.add(but);//加载一下窗体事件。myEvent();//显示窗体。f.setVisible(true);}private void myEvent(){f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//让按钮具备退出程序的功能。/*按钮就是事件源。选择哪个监听器呢?通过关闭窗体示例,了解到,想要知道那个组件具备什么样的特有监听器。需要查看该组件对象的功能。通过查阅button的描述,发现按钮支持一个特有坚挺addActionListener(ActionListener l)*/but.addActionListener(new ActionListener()//不需要适配器,Adapter。监听器中方法超过三个的一般都有适配器。{public void actionPerformed(ActionEvent e){System.out.println("退出,按钮干的");System.exit(0);}});}public static void main(String[] args){new FrameDemo();}
}

熟悉键盘事件与鼠标事件

import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent
{private Frame f;private Button but;private TextField tf;MouseAndKeyEvent(){init();}public void init(){f = new Frame("my frame");f.setBounds(300,100,500,400);f.setLayout(new FlowLayout());tf = new TextField(20);//设定列数。but = new Button("my button");f.add(tf);f.add(but);myEvent();f.setVisible(true);}private void myEvent(){f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});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(code+"非法");e.consume();}}});//给but添加一个键盘监听。but.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){//组合键if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)System.exit(0);//获取对应的键盘字符串。System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());}});//活动监听。but.addActionListener(new ActionListener()//键盘能操作,空格。{public void actionPerformed(ActionEvent e){System.out.println("action ok");}});/*//鼠标监听。but.addMouseListener(new MouseAdapter(){private int count = 1;private int count1 = 1;public void mouseEntered(MouseEvent e){System.out.println("鼠标进入到该组件"+count++);}public void mouseClicked(MouseEvent e){if (e.getClickCount()==2)System.out.println("双击动作"+count1++);}});*/}public static void main(String[] args){new MouseAndKeyEvent();}
}

菜单

MenuBar,Menu,MenuItem

先创建菜单条,再创建菜单,每一个菜单 中建立菜单项。

也可以菜单添加到菜单中,作为子菜单。

通过setMenuBar()方法,将菜单添加到Frame中。

练习:完成一个简单的记事本程序。

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest
{private Frame f;private MenuBar bar;private TextArea ta;private Menu fileMenu;private MenuItem closeItem,openItem,saveItem;private FileDialog openDia,saveDia;private File file;MyMenuTest(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,700,500);bar = new MenuBar();//菜单栏ta = new TextArea();fileMenu = new Menu("文件");//菜单。closeItem = new MenuItem("退出");//菜单项。openItem = new MenuItem("打开");saveItem = new MenuItem("保存");//subMenu = new Menu("子菜单");fileMenu.add(openItem);    fileMenu.add(saveItem);    fileMenu.add(closeItem);       bar.add(fileMenu);f.setMenuBar(bar);f.add(ta);openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);//模式默认为打开。saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);myEvent();f.setVisible(true);}public void myEvent(){openItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){openDia.setVisible(true);String dirPath = openDia.getDirectory();String fileName = openDia.getFile();if(dirPath ==null || fileName==null)return ;ta.setText("");//清空file = new File(dirPath,fileName);try{BufferedReader bufr = new BufferedReader(new FileReader(file));String line = null;while ((line=bufr.readLine())!=null){ta.append(line+"\t\n");}bufr.close();}catch (IOException ex){throw new RuntimeException("读取失败");}}});saveItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if(file==null){saveDia.setVisible(true);String dirPath = saveDia.getDirectory();String fileName = saveDia.getFile();if(dirPath ==null || fileName==null)return ;file = new File(dirPath,fileName);}try{BufferedWriter bufw = new BufferedWriter(new FileWriter(file));String text = ta.getText();bufw.write(text);bufw.close();}catch (IOException ex){throw new RuntimeException("保存失败");}}});closeItem.addActionListener(new ActionListener(){public void  actionPerformed(ActionEvent e){System.exit(0);}});f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public static void main(String[] args){new MyMenuTest();}
}

转载于:https://blog.51cto.com/optimisticpig/1409413

黑马程序员——GUI篇相关推荐

  1. 黑马程序员——总集篇

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 本人编写技术博客的时候只是针对章节的一些比较重要的知识点来编写的: 个人感觉质量 ...

  2. 黑马程序员————GUI(day22)

    ----------------------ASP.Net+Android+IOS开发----------------------期待与您交流! GUI l  概述 l  布局 l  Frame l  ...

  3. 黑马程序员—GUI(菜单)小例子

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

  4. 最近整理的一些常见的面试题,面试大全,黑马程序员面试宝典题库---最新技术--篇

    第八章 最新技术(评论区留言获取原件) 一. Redis 1. Redis 的特点? Redis 是由意大利人 Salvatore Sanfilippo(网名: antirez)开发的一款内存高速缓存 ...

  5. 黑马程序员_java高级篇网络编程TCP实战Day8(上)

    ---------------------ASP.Net+Android+IOS开发.Net培训.期待与您交流! ----------- 黑马程序员_java高级篇网络编程TCP实战Day8(上) ( ...

  6. 【黑马程序员pink名师讲CSS】学好CSS有这一篇就够了(CSS笔记)

    这篇css博客是参考B站黑马程序员–pink老师做的个人笔记,供平时复习使用,现分享给大家,喜欢的话请多多点赞收藏哦~~ 文章目录 P62.css简介 P63.css的语法规范 P65.选择器总体概述 ...

  7. 黑马程序员---微服务笔记【实用篇】

    微服务技术栈导学 微服务实现流程: 所有要学的技术: 分层次教学: 具体分层: 实用篇---第一天 一.认识微服务 单体架构 将业务所有功能集中在一个项目中开发,打成一个包部署 优点:架构简单.部署成 ...

  8. 黑马程序员C++学习笔记<第一阶段_基础篇>

    配套视频网址: 黑马程序员:http://yun.itheima.com/course/520.html?bili B站:https://www.bilibili.com/video/BV1et411 ...

  9. 黑马程序员入学Java知识——精华总结

    黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...

最新文章

  1. 查看mysql字符集及修改表字符集
  2. svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
  3. python 如何查看模块所有方法-Python查看模块(变量、函数、类)方法
  4. php拆分数字字符串方法
  5. java 百度poi_Android应用中使用百度地图API之POI(三)
  6. 浅析设计模式(三)——抽象工厂模式
  7. 话里话外:中小型装备制造企业竞争优势构建之路
  8. hdu 4196(数论)
  9. linux 更改ssh端口_如何在Linux中更改SSH端口-简易指南
  10. 尚硅谷JDBC笔记(带源码)——了解数据库,看这一篇就够了
  11. 开机自启动并关闭窗口(向日葵简约版)
  12. 在一个页面的多个位置同时显示不同的Toastr提示信息
  13. 南京理工大学计算机考研资料汇总
  14. 文法俱乐部 第一章 基本句型及补语
  15. 微处理器 微型计算机 单片机之间有何区别,微处理器,微计算机,微处理机,CPU,单片机,它们之间有何区别...
  16. 获奖!CACTER邮件安全网关荣获电子邮件安全优秀产品奖项
  17. docker的/var/run/docker.sock参数
  18. Java后端工程师学习路线——大学版
  19. 将秒数转为时分秒的格式
  20. 模仿淘宝web扫码登录

热门文章

  1. 7-278 求幂级数展开的部分和 (20 分)
  2. Spring应用上下文 - - context
  3. CDH spark2切换成anaconda3的问题
  4. pmwiki 安装和基本配置
  5. 安卓新发布机制----app bundle
  6. Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...
  7. 如何生成16位流水号
  8. New Chapter
  9. Python学习笔记之函数(三)
  10. SpringBoot集成Actuator端点配置