`

黑马程序员Java培训和Android培训Java GUI图形用户界面

 
阅读更多
黑马程序员

GUI/图形用户界面
AWt的基础知识
GUI全称是Graphical User Interface即用户图形界面。

JDK中提供了AWT和Swing两个包,用于GUI程序的设计和开发。AWT不足以完全应对基于GUI的程序设计,Swing包补充完善了AWT,使得AWT更加丰富完善,可以应对基于GUI的程序设计。

GUI组件可以分为两大类:基本组件(又被称之为构件像按钮文本框之类的用户图形元素,在其上不能容纳其他组件或元素)和容器(例如对话框),分别是java.awt.Component和java.awt.Container的直接或间接子类。

程序的GUI部分由AWT线程管理。编程举例:让框架窗口显示5秒钟后关闭,查看AWT线程的状态。
AWT的事件处理
GUI组件上的图形操作
常用的AWT组件
布局管理器
Swing

AWT事件处理:
事件处理机制:
三个重要概念:
   事件:用户对组件的一个操作,称之为一个事件。
   事件源:发生事件的组件就是事件源。
   事件处理器:某个Java类中的负责处理事件的成员方法。


事件分类:
按产生事件的物理操作和GUI组件的表现效果进行分类:
MouseEvent
WindowEvent
ActionEvent 是一种语义。
按事件的性质分类:
低级事件
语义事件(又叫高级事件)

事件监听器:
一个事件监听器对象负责处理一类事件。
一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理。
在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口。
事件监听器接口类的名称与事件类的名称是相应的,例如,MouseEvent事件类的监听器接口名为MouseListener.

编程实例:实现关闭窗口的事件处理,讲解用不同层次的事件类型来表示同一个事件源对象。
其中用到的函数
public void windowClosing(Windowevent parm1)
{
  parm1.getWindow().setvisible(false);
  //parm1.getSource();   //返回事件源
// parm1.getComponent();  //返回发生事件的组件
  ((Window)parm1.getComponent()).dispose();//强制类型转换后才可以使用那个类型中的方法。
}


处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程:
---编写一个实现 XxxListener接口的事件监听器类:
---XxxListener类中的用于处理该事件情况的方法中,编写处理代码;
---调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上
事件适配器:
灵活设计事件监听器类:
用匿名内部类实现事件监听器:
事件处理的多重运用
修改组件的默认事件处理方式

JDK中也提供了大多数事件监听器接口的最简单的实现类,称之为事件适配器(Adapter)类。

用事件适配器来处理事件,可以简化事件监听器编写。

编程实例:使用事件适配器时的常见问题,解决问题的思路:
---是方法没被调用,还是方法中的程序代码的执行问题?
---是方法名写错了,还是没有注册事件监听器?
事件适配器类的不足之处。

灵活设计事件监听器类
如果要在事件监听器类中访问非事件源的其他GUI组件,程序该如何编写?

事件处理的多重运用
如何知道一个GUI组件到底能够触发哪几种事件?
一个组件上的一个动作可以产生多种不同类型的事件
一个事件监听器对象可以注册到多个事件源上
在一个事件源上也可以注册对同一类事件进行处理的多个事件监听器对象

修改组件的默认事件处理方式
只有在一个组件上注册了某种事件的监听器对象后,组件才会产生相应的事件对象。
默认的processEvent方法调用相应的processXxxEvent方法。
调用enableEvents(long eventsToEnable)方法,可以在即使没有注册事件监听器的情况下,组件也能够对某些类型的事件进行响应和产生相应的事件对象。

编程实例:在一个窗口上显示一个按钮,一旦鼠标移动到这个按钮上时,按钮就移动到了其他位置,这样,鼠标就永远无法点击到这个按钮。

GUI组件上的图形操作

Graphics类与图形绘制
Component.getGraphics()方法和Graphics类
getGraphics()方法为组件创建一个图形上下文。如果组件当前是不可显示的,则此方法返回 null。 Graphics类:Graphics 类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。 Graphics 对象封装了 Java 支持的基本呈现操作所需的状态信息。此状态信息包括以下属性:


要在其上绘制的 Component 对象。
呈现和剪贴坐标的转换原点。
当前剪贴区。
当前颜色。
当前字体。
当前逻辑像素操作函数(XOR 或 Paint)。
当前 XOR 交替颜色

Graphics.drawLine(int x1,int y1,intx2,int y2)方法。
Graphics.drawString(String str,int x,int y)方法。
Graphics.drawString方法的坐标参数是相对于矩形框的左下角。

编程举例:以鼠标在窗口中按下时的位置作为起始点,鼠标释放时的位置作为终止点,在鼠标释放时将直线画出,并在每条直线的起始点和终止点位置上打印出它们的坐标值。利用Graphics.drawLine()和Graphics.drawString()方法进行绘制。



组件重绘的处理

组件重绘的原理。
paint(Graphics g)的作用。
AWT线程对组件重绘的调用过程。(有图)。
利用 public void paint()方法进行组件重绘,在方法中记录绘画的组件的各种信息。
Vector vLine=new Vector();Enumeration e=vLines.elements(); MyLine line=(MyLine)e.nextElement();  由于e.nextElement返回的类型是Object所以要强制转换。
repaint()方法可以导致窗口重绘。

编程举例:在窗口上画直线和打印文本的功能,并在窗口重绘后重绘窗口上的所有直线。

图像显示
双缓冲技术

图像显示  如何在GUI组件上显示图像

使用Graphics.drawImage(Image img,int x,int y,ImageObserver observer)方法显示图像。Image 对象只有在使用的时候才会加载。 用ImageObserver对象监视进度。(Image类)

使用Component.getTookit.getImage(String path)语句获得Image实例对象。

编程实例:在窗口上显示图像文件中的图像,并解决由于drawImage内部实现机制造成的图像不能显示问题,和实现图像的永久显示。

多次调用drawImage()方法,图像才能显示出来。
利用 public void paint(Graphics g)方法可以弥补多次调用drawImage()方法的不足。

双缓冲技术

Component.createImage方法创建内存Image对象。
在Image对象上进行绘制的结果就成了一幅图像。
在Image对象上执行与组件表面同样的绘制,Image对象中的图像时组件表面内容的复制,当组件重画时,只需要将内存中的Image对象在组件上画出。

编程实例:使用双缓冲区技术重绘组件表面的所有图形。

常用的AWT组件
java.lang.Object(Borderlayout  CardLayout CheckBoxGroup Color Event Font FlowLayout Fontmetrics Graphics GridBagLayout GridLayOut Image Insets Point Polygon Rectangle Tookit MenuComponent(MenuBar MenuItem(Menu--PopupMenu  CheckboxMenuItem)) Component(Button Canvas Checkbox Choice Container(Panel(Applet(java.applet.package)) Window(Dialog--FileDialog) ScrollPane) Label List Scrollbar TextComponent(TextArea TextField)))

java.lang.Object----java.awt.geom.Dimension2D----Dimension

Exceptions----AWTException     Errors----AWTError



Canvas
Canvas是具有最基本和最简单的GUI功能的组件。
Canvas代表屏幕上的一块空白的矩形区域,程序能够在这个部件表面绘画,也能够捕获用户的操作,产生相应的事件。
当要设计自定制的具有GUI功能的组件类时,继承Canvas将会大大简化编程难度。可以覆盖paint(Graphics g)和update(Graphics g)方法。

编程实例:设计一个自定制的计时器组件,当鼠标在计时器组件上按下时,计时器开始计时,并显示计时时间,当鼠标释放时,计时器停止计时。
drawString();
SimpleDateFormat sdf=new SimpleDateFormat(); sdf.parase();
repaint();

代码在E:\Jcreator3.5\JCreatorV3LE\MyProjects中的StopWatch.java TestStopWatch.java  TestStopWatchFrame.java中

菜单

一个完整的菜单系统由菜单条,菜单和菜单项组成,它们之间的关系如图:
Java中与菜单相关的类主要有:MennuBar(菜单条),Menu(菜单),MenuItem(菜单项)。

编程实例:实现图中的菜单和相关事件处理。
MenuBar add( Menu add (MenuItem CheckboxmenuItem))
最后用setMenubar()来将Menubar 的实例添加到窗口中。
利用继承ActionListener接口来实现监听器类,在监听器类中实现actionPerformed(ActionEvent e)方法,来实现相关的动作。将要添加动作事件的对象用方法add()。用getActionCommand()方法来获得选择的菜单项的名字。

setActionCommand()方法的作用:
设置由此XXX引发的动作事件的命令名。


Container
有些组件不能独立显现,只能放在一个容器中使用。例如Frame窗口。
Container类是所有容器类的父类,Container.add方法用于将组件添加到容器中。
Container也是Component的子类,因此也可以作为组件增加到其他容器上。
Component类下面有Container类,Container类下有Window和Panel类;Window下面有Frame和Dialog类;Panel类下面有Applet。Window,Frame,Dialog统称为 Borderlayout。 Panel和Applet被称为FlowLayout。
将窗口的显示设置在主函数中将其他组件设置以后的后面。否则会造成某些组件显示不出来。

Dialog与FileDialog类
Dialog类用于产生对话框。但是没有菜单条,也不能改变大小。一般用于临时显示的窗口。用于显示提示信息或接受客户的输入。对话框不能独立的存在,必须有个上级窗口。

模态对话框和非模态对话框。模态对话框特点是在没有关闭模态对话框时不能操作同一个程序的其他窗口。而非模态对话框则可以。
getOwner()方法。
Dialog类的两个常用的构造方法:
public Dialog(Frame owner,String title);
public Dialog(Frame owner,String title,boolean modal)

编程实例:主框架窗口通过两个按钮分别打开一个模态对话框和一个非模态对话框,并与这两个对话框进行数据交换。

内部类中的某个函数需要调用外部类的实例对象,应该使用 外部类名称.this 来调用。
访问控制是为了实现封装的特性。

FileDialog类是Dialog类的一个子类,能够产生标准的文件存取对话框。

Checkbox
Checkbox类用来建立单选按钮或多选按钮(也叫复选框)。

创建多选按钮,只需要使用构造函数:
Checkbox(String label,boolean state)

创建单选按钮,需要使用构造函数:
Checkbox(String label,boolean state,CheckboxGroup group)

单选按钮和多选按钮的语义事件为ItemEvent,对应的监听器接口为ItemListener,该接口中只有一个itemStateChanged方法。

编程实例 :创建一个多选按钮和两个属于同一组的单选按钮,并对每个按钮的选中情况进行处理。

jdk1.6中的ItemListener中没有itemStateChangded方法。
切记如果写了事件监听器方法,一定要把它添加到要监听的对象中。并且得放入构造函数中。



Choice
Choice类用来制作单选下拉列表框.

Choice类的语义事件为ItemEvent,对应的监听器接口为ItemListener,该接口中只有一个itemStateChanged方法。

编程举例:实现类表框和相关事件处理。


Panel与ScrollPanel类
Panel类是一个容器类,用于产生一种特殊的空白面板,可以容纳其他的组件,但不能独立存在。

ScrollPanel类是一种容器类,用于产生滚动窗口,通过滚动条在一个较小的容器窗口中显示较大的子部件。

编程举例: 如何使用ScrollPane
十一
布局管理器
一个容器中的各个组件之间的位置和大小关系就称之为布局。

Java语言提供了布局管理器来管理组件在容器中的布局,而不是直接使用位置坐标 来设置各个组件的位置和大小。

AWT中的布局管理器类:
  --BorderLayout(默认的)
  --FlowLayout
  --GridLayout
  --CardLayout
  --GridbagLayout  "布局管理器之王"GridBagLayout 类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。

编程实例:
了解BorderLayout布局管理器的作用:将窗口划分为东西南北中五部分。


FlowLayout

编程实例:了解FlowLayout布局管理器的作用。

利用setLayout(new FlowLayout())创建该布局管理器。


GridLayout

GridLayout布局管理器将容器划分成若干行列的网格,在容器上添加组件时,它们会按从左到右,从上到下的顺序在网格中排列。

在GridLayout的构造方法中,需要指定在容器上划分的网格的行,列数。




CardLayout
CardLayout布局管理器能够实现将多个组件放在同一容器区域内的交替显示,相当于多张卡片摞在一起,在任何时候都只有最上面的一个可见。

编程实例:创建两个Panel对象,每个Panel上都能拥有一个布局管理器,左边的Panel使用GridLayout布局管理器放置了3个按钮,右边的Panel上使用 CardLayout布局管路器放置卡片,最后在窗口上使用BordLayout放置这两个Panel面板。右边的Panel中带有5张卡片(用五个按钮模拟),按下左边Panel中的prev按钮,依次向前显示,按下next按钮,依次向后显示,按下three按钮,显示第三张卡片。


取消布局管理器

调用Container.setLayout(null)方法取消布局管理器设置,在这种情况下,可以调用Component.setBounds方法来用绝对坐标设置容器上的每个组件的大小和位置。

不使用布局管理器将会给程序带来一个潜在的问题,当容器大小改变时,所有组件仍保持原来的位置和大小,将导致整个程序界面比较"难看"。

编程实例:演示不使用布局管理器的效果
十二
Swing和JFC
所有的Swing组件,位于javax.swing包中,他们是构筑AWT上层的GUI组件,Swing组件时JComponent类的子类,Jcomponent又是java.awt.Container的子类。

为了保证可移植性,Swing完全用Java语言编写。

Swing提供了比AWT更多的组件库,例如, JTable,JTree,JComboBox。

Swing也增强了AWT中原有组件的功能,例如,与AWT中的Button对应的Swing组件时JButton。

JFC(java Foundation Class)是指Sun对早期的JDK进行扩展的部分,集合了Swing组件和其他能简化开发的API类,包括Swing,java 2D,accessibility,internationalization。

编程实例:从AWT过渡到Swing


JFrame

JFrame是AWT中的Frame相对应的Swing组件。

JFrame上面只你能有一个唯一的组件,这个组件为JRootPane,调用JFrame.getContentPane()方法可获得JFrame中内置的JRootPane对象

应用程序不能直接在JFrame实例对象上增加组件和设置布局管理器,而应该在JRootPane对象上增加子组件和设置布局管理器。

调用JFrame的setDefaultCloseOperation方法,可以设置单击窗口上的关闭按钮时的事件处理方式,例如,当设置值为JFrame.EXIT_ON_CLOSE时,单击JFrame窗口上的关闭按钮,将直接关闭JFrame框架窗口并结束程序运行。

编程实例:使用JFrame来创建程序的主框架窗口。




JScrollPane
JScrollPane是与AWT中的ScrollPane相对应的Swing组件。

最基本的JScrollPane由水平和垂直方向上的JScrollBar,以及一个JViewport组成。

调用JScrollPane,getViewPort方法,可以获得代表滚动窗口中的视图区域的JViewport对象。

调用JViewport.setView方法,可以将滚动窗口中要显示的内容作为子组件增加到JViewport上。

<<Java指南>>(可从SUN公司的网站上下载,英文名称为The Java Tutorial)中,有关于 JScrollPane使用的详细指导。

编程实例:使用JScrollPane创建滚动窗口。


Swing中的标准对话框
JOptionPane类提供了若干个showXxxDialog静态方法,可用来产生简单的标准对话框。

showConfirmDialog(Component parentComponent,Object message,String title,int optionType,int messageType)中的每个参数的意义。

编程举例:使用JOptionPane类,在程序开始运行时,弹出一个对话框提示用户,在主框架窗口的关闭按钮被单击时,弹出一个对话框询问用户是否真的要结束程序运行。

JFileChooser类专门用来实现文件存取对话框。

<JDK安装目录>\Demo\jfc\FilechooserDemo目录下的程序代码,演示了在JFileChooser中如何设置文件列表过滤器。
十三
计算机界面的程序实现
要求:
单击任何按钮,按钮上面的数字或符号按从左到右的顺序显示在文本框中
文本框中的文字是右对齐显示

BoxLayout布局管理器:
BoxLayout是在Swing中新增加的一种布局管理器,它允许多个组件全部垂直拜访或全部水平摆放。

使用BoxLayout实现计算机界面





学习和开发GUI程序的建议
重在掌握GUI程序的一些基本原理和开发过程,通过学习AWT组件可以更容易掌握GUI程序的基本原理和开发过程,但在GUI程序开发中,应尽量使用Swing组件。

查阅JDK文档中的Swing包,通读一下其中所包含的组件,以了解Swing提供了哪些组件,但不必去仔细阅读每个组件的具体使用帮助。

只在要用到某个GUI组件时,才有必要仔细阅读这个组件的具体使用帮助。如果要快速掌握某个新遇到的组件的用法,最好是能够找到并参阅该组件的例子程序。

在JDK的demo程序目录中,或是<<Java指南>>(可从SUN公司的网站上下载,英文名为The Java tutorial)中,都能找到某些组件的应用范例。

参考别人的成功应用,是快速学习和完成工作的有效方式。


思考与实践(1)
1什么是事件,事件源和事件处理器,并描述三者的工作关系。
2描述事件处理的编码实现过程。
3描述事件监听器类和事件适配器类的关系与区别。
4描述在窗口上画直线的编写过程和组件重绘的原理。
5为课程中所讲的自定义计时器组件增加如下功能:允许程序设置计时器的显示文本的颜色,时间显示文本的字体大小随组件大小的改变而改变。
6结合JDK文档帮助,编写一个使用FileDialog选择文件名的例子程序。单击主窗口上的"打开"按钮,打开一个文本对话框,并将选择的文件路径显示在主窗口上的"打开"按钮左边的文本框中。在文件对话框中可以对文件类型进行过滤,每次打开文件对话框时,对话框中的初始显示目录为上次选择的文件所在的目录。
7修改前面实现计算机界面的程序代码,将增加单个按钮的代码用一个函数来实现,然后在一个循环语句中调用这个函数来增加所有的按钮。




分享到:
评论

相关推荐

    黑马程序员java贪吃蛇源码

    在Java编程领域,贪吃蛇同样是一个很好的实践项目,能帮助初学者理解和掌握面向对象编程的基本概念以及事件处理、图形用户界面(GUI)设计等技能。本文将深入解析黑马程序员汤阳光老师分享的Java贪吃蛇源码,带领...

    Java GUI 图形用户界面

    Java GUI,全称为Java图形用户界面,是Java编程语言中用于创建交互式图形界面的技术。在Java中,GUI主要用于构建桌面应用程序,使用户可以通过视觉元素如按钮、文本框、菜单等进行交互。Java GUI的设计遵循事件驱动...

    传智播客.黑马程序员《Java 基础入门》课后习题答案

    行时所需要的基本条件和许多 Java 基础类,例如,IO 类、GUI 控件类、网络类等。JRE 是提供给 普通用户使用的,如果你只想运行别人开发好的 Java 程序,那么,你的计算机上必须且只需安装 JRE。 JDK(Java ...

    java拼图游戏源码.zip

    首先,Swing是Java提供的一种用于创建图形用户界面(GUI)的工具包,它构建在AWT(Abstract Window Toolkit)之上,提供了更多的组件和功能。在本游戏中,Swing可能被用来创建按钮、面板、图像视图等元素,这些元素...

    如何进行JavaGUI图形用户界面编程.doc

    Java GUI 图形用户界面编程是 Java 语言中一个重要的组成部分,用于建立和设置图形用户界面。Java 提供了多种 GUI 库包,包括 AWT、Swing 和 SWT/JFace,每种库包都有其优缺点和应用场景。本文将详细介绍 Java GUI ...

    如何进行Java GUI图形用户界面编程

    Java GUI图形用户界面编程中,开发者通常面临三个主要的选择:AWT、Swing以及SWT/JFace。每个框架都有其特点和适用场景。 1. AWT(Abstract Windowing Toolkit)是Java早期提供的GUI构建工具,它包含在java.awt包中...

    黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件).zip

    Java GUI(图形用户界面)是Java编程中的一个重要领域,它允许开发者创建交互式的应用程序,让用户通过视觉元素与程序进行互动。在本视频教程“黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件)”中,...

    Java_GUI图形化用户界面编程的基础知识

    Java的GUI(图形用户界面)编程是构建桌面应用程序的关键部分,它允许用户通过图形化的方式与程序进行交互。在Java中,GUI的实现基于AWT(Abstract Window Toolkit)库,这是一个跨平台的工具包,使得开发者可以编写...

    Java GUI图形化用户界面编程的基础知识

    ### Java GUI图形化用户界面编程的基础知识 #### 一、Java GUI编程概述 Java的GUI编程(Graphic User Interface,图形用户接口),是在它的抽象窗口工具箱(Abstract Window Toolkit,AWT)的基础上实现的。Java中...

    java图形界面五子棋

    1. **Java GUI**:Java GUI(图形用户界面)是Java编程中的重要组成部分,它提供了丰富的组件库,如按钮、文本框、面板等,用于创建桌面应用程序的交互式界面。在这个五子棋游戏中,开发者可能使用了Java Swing或...

    JAVA实现学生信息管理系统+图形用户界面(GUI).rar

    本项目“JAVA实现学生信息管理系统+图形用户界面(GUI)”是利用Java技术实现的一个实用系统,它结合了后端逻辑处理和前端用户交互,为管理学生信息提供了一个直观、便捷的平台。以下将详细介绍该系统的相关知识点: ...

    java GUI 图形界面

    java GUI 学习java比用的东西

    java 图形界面GUI代码

    Java图形用户界面(GUI)是Java编程中一个重要的部分,用于创建交互式的、可视化的应用程序。GUI允许用户通过鼠标和键盘等输入设备与程序进行交互,使得程序更加友好且易于操作。下面,我们将深入探讨Java GUI开发的...

    java图书管理系统(GUI)图形界面版

    该系统采用GUI(图形用户界面),使得用户可以直观、便捷地进行操作,提高了工作效率。在本文中,我们将详细探讨该系统的关键知识点。 首先,系统的功能模块主要包括: 1. 图书管理:系统支持图书的增加、删除、...

    外文文献翻译-javagui图形用户界面、程序及并发性.doc

    Java GUI(图形用户界面)是Java编程中的一个重要组成部分,它为开发者提供了创建用户友好、跨平台的图形界面的能力。在Java 1.0版本中,Abstract Windowing Toolkit (AWT)是实现GUI的主要库,但它的设计并不理想。...

    java-gui图形界面组件大全(内含139个demo)

    Java GUI,全称为Java Graphical User Interface,是Java编程语言中的一个重要部分,用于构建桌面应用程序的用户界面。GUI提供了丰富的组件库,使得开发者能够创建出交互式的、视觉上吸引人的应用。在Java中,主要的...

    JAVA程序员培训定制课程

    这一部分将带领学员进入图形用户界面(GUI)编程的世界,使用Java的Swing或JavaFX库: 1. **GUI组件**:介绍各种组件,如按钮、文本框、标签等,并学习如何布局这些组件。 2. **事件处理**:讲解事件监听机制,如何...

    java简单计算器开发GUI图形化界面设计与实现(项目源码+课程设计报告)

    学习异常处理、线程、图形用户界面设计、 网络通信等内容。使学生的专业知识进一步完善和丰富,为将来的开发和研究工 作打下一定的基础。 1.2. 课程任务 (1) 巩固和加深学生对 Java 语言课程的基本知识的理解和...

    实验06 GUI图形界面设计1.doc

    实验06 GUI图形界面设计1主要关注Java语言的图形用户界面(GUI)开发,特别是使用Java Swing库。GUI设计是创建交互式应用的关键部分,它允许用户与程序进行直观的交流。以下是实验要求和相关知识点的详细说明: 1. ...

    java 图形用户界面设计

    Java 图形用户界面设计是 Java 编程语言中的一种重要组件,用于创建图形用户界面(GUI)。在 Java 中,有多种方式来设计 GUI,包括使用 AWT、Swing 和 SWT/JFace 等开发工具集。下面将详细介绍 Java 图形用户界面...

Global site tag (gtag.js) - Google Analytics