java论文 学习心得 图形界面

java图形化用户界面及Applet学习总结

一、javaApplet

Application和Applet是Java程序的两种基本形式。

Applet是特殊的Java程序,它不需要专门的解释器来执行它,相对于Java Appliction的解释器,如JDK的java.exe,VJ++的jview.exe,Java Applet的解释器就是Internet的浏览器,确切地讲就是兼容Java的Internet浏览器。

Applet的工作原理:

1,.class和HTML保存在服务器

2,当浏览器向服务器请求下载嵌入了Applet的HTML文件时。

3,下载到客户端后,由浏览器解释HTML中的各种标记并显示在用户屏幕上,当浏览器遇到HTML文件中的一个特殊标记时,表明嵌有Applet程序,浏览器会根据Applet名字和位置把其字节码文件从WWW服务器上下载到本地。

4,利用浏览器本身拥有的Java解释器执行该字节码。

Applet类的使用:

Java Applet程序必须有一个主类,其父类是系统的Applet类,正是通过这个类才能完成Applet程序与浏览器的配合

存在于java.applet包中,从继承结构上说属于用户图形界面的java.awt包,是系统类java.awt.Panel的子类,由于Applet类的特殊,系统专门为它建立了一个java.applet包

Applet类是Panel的子类

Panel类的作用:

(1)包容和排列其他的界面元素,如按钮、对话框等;

(2)响应它所包容范围之内的事件,或把事件向更高层次传递。

Applet类的作用:

Applet在继承上述作用的基础上,还具有一些与浏览器和Applet 生命周期有关的专门方法

Applet类的主要方法:

1、完成初始化操作的init()方法

Applet的字节码文件从WWW服务器下载后,浏览器将自动创建一个Applet类的实例并调用它从Applet类那里继承来的init()方法。用户程序可以重载父类的init()方法,定义一些必要的初始化操作。

2、启动浏览器运行Applet的start()方法

Start()方法在init()初始化之后被自动调用,或者是Applet被重新启动时被系统自动调用。也就是说,当包含Applet的HTML页面被重新加载时,Applet实例就会被重新启动并调用start()方法,但是init()方法只被调用一次。

3、显示Applet界面的paint()方法

paint()方法的主要作用是在Applet的界面中显示文字、图形和其他界面元素。导致调用paint()方法的事件主要有三种:

1、Applet被启动之后

2、Applet 所在的浏览器窗口改变,包括大小、移动、被遮挡、重新显示等。

3、Applet的其他相关方法被调用,如repaint()

paint()方法有一个固定的参数----Graphics类的对象g。

4、暂停Applet前执行的stop()方法

stop()方法类似于start()方法的逆操作,当用户暂停Applet之前,浏览器将首先自动调用stop()方法(例如用户转去查看其它网页)。用户可以重载Applet类的stop()方法。

5、消灭Applet之前执行的destroy()方法

当用户退出浏览器时,浏览器会自动调用此方法来完成一些释放资源、关闭连接之类的操作。

Applet与HTML文件的配合

在HTML中嵌入Applet的标记为

<applet 参数> </applet> 例如:

<applet code= "Demo.class"

</applet>

此标记至少需包括三个参数:

Code: 指明Applet字节码文件名

Height: 指明Applet界面占据的区域的高度,以像素为单位

Width: 指明宽度,以像素为单位 width= "500" height= "300">

其他可选的参数:

Codebase:当Applet文件与HTML文档不在同一目录时, 使用codebase来指明字节码文件的位置,这个位置使用URL格式

Alt: 当浏览器因某种原因不能执行字节码文件时,就把alt参数指明的信息显示给用户

align:表示Applet界面区域在浏览器窗口中的对齐情况

向applet传递参数

通过HTML文件的<param>标记,applet可以从中获得所要的参数,使用方法为:

<applet ??..>

<param name=参数名 value= 参数值 >

……

</applet>

在Applet中利用getParameter()方法来获取HTML传递来的参数,这个方法有一个字符串参数,表明它所希望获取的HTML参数的名字(即name指定的参数名),方法的返回值是一个字符串对象,即HTML中value指定的字符串。如果用户希望这个参数是其他类型,则要进行参数类型的转换

二、java图形化界面

图形化界面(graphics user interface ,GUI)使用图形形式,借助于窗口中的菜单。按钮等界面元素和鼠标元素,实现用户与计算机系统的交互作用。用户通过图形界面向计算机发布指令、控制操作,系统的运行结果也以图形界面方式显示给用户。图形用户界面生动形象、操作方便,深受广大用户的欢迎。

图形用户界面(GUI)的重要性:美观、易用、统一

为方便用户界面的开发,设计了专门的类库来生成各种标准图形界面元素,和处理图形界面的各种事件,这个类库就是java.awt包。AWT是abstract windows toolkit(抽象窗口工具集)的缩写。AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行,使得开发人员所设计的界面独立于具体的界面实现,可以适用于所有的平台。

java的GUI编程 (Graphic User Interface,图形用户接口),是在它的抽象窗口工具箱(Abstract Window Toolkit,AWT)上实现的,java.awt是AWT的工具类库,其中包括了丰富的图形、用户界面元件和布局管理器的支持。

构成图形界面的元素和成分可分为三类:

容器:用来组织其它界面成分和元素的单元(如窗口)。容器内包含的成分和元素可能又是一个容器(层层相套)

控制组件:是图形用户界面的最小单位之一,它里面不再包含其他的成分。 目前常用的控制组件有:

选择类的:复选框Checkbox、单选按钮CheckboxGroup,下拉列表List; 文字处理类的:文本框TextField、文本区域TextArea;

命令类的:按钮Button、菜单Menu等。

用户自定义成分:它不能被系统识别和承认,通常只能起到装饰、美化作用,而不能响应用户的动作,也不具有交互功能。

显示图像

Graphics类的

drawImage(URL地址,文件名)方法可显示图像.bmp 、.gif 、.jpeg、.png。 Image类

图像文件的URL:

URL picurl= new URL

(“http://xxx.yyy.edu/Applet/img1.gif”);

取一幅图像构成图像对象

Image img1 = getImage(picurl);

Image img2 =

getImage(getCodeBase(), “img2.gif”);

显示一幅图像:

g.drawImage(img1, x, y, this);

g.drawImage(img1, x, y,Color.red, this);

g.drawImage(image1, x, y,x2,y2, this);

g.drawImage(image1, x, y,x2,y2,Color.red, this);

使用AWT控件

在AWT的概念中,窗口系统所显示的各种对象统称为控件:Button,Menu,List等等都是控件。

Java控件:

标签Label

按扭Buuton

选项框Choice

复选框和选项按扭Checkbox

列表框List

文本框TextField

文本区TextArea

滚动条Scrolbar

标签Label

构造函数

Label();构造一个空的标签,不显示任何内容。

Label(String label);构造一个显示内容为label的标签。

Label(String label, int alignment);

常用方法:getText(),setText()

请编写一个Applet,其功能为:在标签上输出字符串"Java程序"。要求标签以红色为背景,以白色为前景。

import java.applet.Applet;

import java.awt.*;

public class Applet1 extends Applet

{

}

按扭Buuton

构造函数 Label p=new Label(" Java 程序 "); public void init( ) { } add(p); p.setBackground(Color.red); p.setForeground(Color.white);

Button() 创建一个没有标签的按钮。

Button(String label)

常用方法:

getLable()、setLabel()、addActionListener(ActionListener)、removeActionListener(ActionListener)

编写Applet, 其中包含两个按钮:按钮上的文本分别为"确定"和"取消"。当按下"确定"键时,通过paint()方法在(20,100)位置处,用兰色显示你按下"确定"按钮的次数;当按下的键是"取消"时,通过paint()方法在(20,120)位置处,用红色显示你按下"取消"按钮的次数。(要求"确定"和"取消"的次数同时显示在Applet中。)

import java.awt.*;

import java .awt .event .*;

import java.applet.*;

public class Applet1 extends Applet implements ActionListener

{

int i1,i2; Button btn1,btn2; public void init() { } public void paint(Graphics g) { g.setColor(Color.blue); i1=0; i2=0; btn1=new Button("确定"); btn2=new Button("取消"); add(btn1); add(btn2); btn1.addActionListener(this); btn2.addActionListener(this);

} } g.drawString("你点击了"确定""+i1+"次",20,100); g.setColor(Color.red); g.drawString("你点击了"取消""+i2+"次",20,120); public void actionPerformed(ActionEvent e) { } if(e.getSource()==btn1) { i1++; } if(e.getSource()==btn2) { i2++; } repaint();

文本框TextField

因为只允许有一行,所以当按下Enter或Return键时,ActionListener可以通过actionPerformed()知道这个事件。如果需要,还可以增加其他的组件监听者。

除了注册一个ActionListener,你还可以注册一个TextListener来接收关于个别击键的通知。它的回调方法是textValueChanged(TextEvent)。

请编写一个Applet实现如下功能:接受文本框输入的一个正整数,求该数的平方根,并在标签上输出。

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class Applet1 extends Applet implements ActionListener

{

Label out, p;

TextField in;

int x;

public void init( )

{

p=new Label("请输入一个int型正整数: "); out=new Label(" "); in=new TextField(8); add(p); add(in); in.addActionListener(this); add(out);

}

public void actionPerformed(ActionEvent evt)

{

x=Integer.parseInt(in.getText());

out.setText(" "+x+"的平方根: "+Math.sqrt(x));

}

}

滚动条Scrolbar

滚动面板提供了一种不能作为自由窗口的通用容器。它应当总是和一个容器相关联(例如,框架)。它提供了到一个更大的区域的视窗以及操纵这个视窗的滚动条。

画布Canvas

画布(Canvas)是一个可以在上面绘画的简单矩形背景组件,在画布里可以像Applet一样绘制图形 ,也可以直接用鼠标在上面操作。Canvas继承于Component类,有自己的Paint()方法,能响应鼠标和键盘事件。

创建

Canvas myCanvas = new Canvas();

常用方法

setSize();

public void paint(Graphics g)

例:

import java.awt.*;

import java.applet.*;

class Mycan extends Canvas

{

Mycan()

{

setSize(150,150);

setBackground(Color.blue);

}

public void paint(Graphics g)

}

public class Canvas1 extends Applet

{

Mycan c;

public void init()

{

c=new Mycan();

add(c);

}

}

//<applet code=Canvas1.class width=200 height=300></applet> 键盘事件KeyEvent

主要方法

char getKeyChar()

返回引发事件的按键的Unicode字符

String getKeyText() { } g.setColor(Color.white); g.fillOval(50,50,50,50); g.setColor(Color.blue); g.drawString("canvas", 55,75);

返回按键的文本内容

例:编写Applet, 当按下的键盘键时,在Applet中通过paint()方法,在(25,20)位置处显示"你好!",释放该键时显示"再见!"。

public class Applet1 extends Applet implements KeyListener {

String s; int i; public void init(){

addKeyListener(this);

}

public void paint(Graphics g){

if(i==1) g.drawString (s,25,20);

} if(i==2) g.drawString (s,25,20);

public void keyPressed(KeyEvent e){

i=1;

s=“你好!”;

repaint();

}

public void keyReleased(KeyEvent e){

i=2;

s=“再见!”;

repaint();

}

}

组件布局管理

容器里的组件的位置和大小是由布局管理器决定的。在Java编程语言中包含下面的布局管理器:

Flow Layout(Panel和Applets的缺省布局管理器)

Border Layout(Window、Dialog及Frame的缺省管理程序) public void keyTyped(KeyEvent e){}

Grid Layout

Card Layout

GridBag Layout

顺序布局(FlowLayout)

顺序布局(FlowLayout)是其中最基本的一种布置,是面板(Panel)和它的子类Applet的缺省布局管理器。面板是一个容器,可以容纳多个组件;Applet是它的子类,也继承了能容纳组件的能力。

顺序布局是指将一个个组件从左到右依次、从上到下依次排列,每个组件所占的空间依据各组件所指定的合适尺寸来安排,当一行容纳不下时,便自动安排在下一行。

FlowLayout();

FlowLayout(int align)

FlowLayout(int align,int hgap,int vgap);

参数分别为:对齐方式,横向和纵向以像素为单位的间距

setLayout(new FlowLayout(FlowLayout.RIGHT, 20, 40));

setLayout(new FlowLayout(FlowLayout.LEFT))

边界布局(BorderLayout)

边界布局(BorderLayout)是窗口类(Window,Frame,Dialog和FileDialog)的缺省布局管理器。

Border布局管理器为在一个Panel或Window中放置组件提供一个更复杂的方案。Border布局管理器包括五个明显的区域:右东左西上北下南和居中 。

当拉伸使用BordLayout布局管理器的容器,各个组件相对位置不变,中间部分组件的尺寸会发生变化,East和West位置的组件的宽度不变,高度随着改变,而South和North位置的组件的高度不变,宽度随之改变。

卡片布局(CardLayout)

卡片布局(CardLayout)将组件像卡片一样放置,每次只显示一个,实现界面之间的相互切换。能够帮助用户处理两个以至更多的成员共享同一显示空间。

CardLayout(); 创建间距为零的对象。

CardLayout(int hgap,int vgap); 创建带有水平hgap和垂直vgap间距的对象。 使用下列Card布局管理器方法转换到一个新卡中。

first(Container parent) 显示第一张卡片。

last(Container parent) 显示最后一张卡片。

next(Container parent) 显示下一张卡片,如果当前是最后一张,则显示第一张。 previous(Container parent) 显示前一张卡片。

show(Container parent,String name) 显示指定名称的组件。

网格布局(GridLayout)

网格布局(GridLayout)是把容器区域分为若干个网络,每一个网格可以放置一个组件。当改变容器大小后,其中的组件相对位置不变,但大小改变。容器中各个组件同高度、同宽度。各个组件的排列方式为:从上到下、从左到右一次排列。

其构造方法:

new GridLayout(int rows,int columns); 创建一个rows行columns列的GridLayout布局管理器对象。

Grid布局管理器总是忽略组件的最佳大小。所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的。同样地,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的。

setLayout(new GridLayout(int rows, int cols));

创建并安装一个带有规定好行数和栏数的Grid布局。对布局中所有组件所给的大小一样。

setLayout(new GridLayout(int rows, int cols, int hgap, int vgap);

面板(Panel)

Panel类(面板)

功能:容纳其他对象,安排合理布局

创建面板:

Panel myPanel=new Panel();

一个面板对象被创建,为了能看得见,它必须添加到窗口或框架对象上。这一点用Container类中的add()方式可以做到。

add(myPanel);

将面板作为容器:

myPanel.add(button)

窗口

Frame类

功能 : 制作一般的独立窗口,它是构件容器

创建

Frame fmInstance=new Frame();

或 Frame fmInstance=

new Frame(“The window for test”);

将其显示到屏幕上

fmInstance.show()

注意:不用add()

窗口

主要方法

dispose, setVisible ,getTitle, setTitle等

窗口的相关事件:

WINDOW_ACTIVATED

WINDOW_DEACTIVATED

WINDOW_OPENED

WINDOW_CLOSED 代表窗口已被关闭(指关闭后)

WINDOW_CLOSING 代表窗口正在被关闭(指关闭前,如点击窗口的关闭按钮) WINDOW_ICONIFIED 代表使窗口最小化成图标

WINDOW_DEICONIFIED 代表使窗口从图标恢复

由于通过实现接口XXXListener来完成事件处理时,要同时实现该接口中的所有方法。通常我们只是需要对其中的某些方法做处理,而不想实现所有的无关方法。

因此,为了方便起见,JDK1.1为某些监听器接口提供了适配器类(XXXAdapter),当需要对某种事件进行处理时,只需让事件处理类继承事件所对应的适配器类,只重写需要关注的方法即可,而无关的方法就不必实现了。

适配器是一个类而不是接口,因而处理事件的类只能继承一个适配器。

菜单

菜单是图形用户界面的重要组成部分,是由菜单条(MenuBar)、菜单(Menu)、菜单项(MenuItem)和复选菜单项(CheckboxMenuItem)等对象组成。

窗口加入菜单

创建菜单条

MenuBar mb=new MenuBar();

创建菜单项,并加入菜单条:

Menu m1=new Menu(“File”);mb.add(m1);

创建菜单子项,并加入菜单项:

MenuItem open=new MenuItem(“open”); m1.add(open);

菜单条放入窗口:

Frame f = new Frame("MenuBar"); f.SetMenuBar(mb);

将各个菜单子项注册给实现了动作事件的监听接口

ActionListenter的监听者。

open.addActionListener(this);

为监听者定义actionPerformed(ActionEvent e)方法,

在这个方法中调用e.getSource()或

e.getActionCommand()来判断用户单击的菜单子 项,并完成这个子项定义的操作。

使用分隔线 m1.addSeparator();

使用菜单子项快捷键

MenuItem cut= new MenuItem(“Cut”,new MenuShortcut(?x?));

或cut.setShortcut(new MenuShortcut(?x?));

复选菜单项(CheckboxMenuItem) CheckboxMenuItem mi2 = new CheckboxMenuItem("Persistent");应当用ItemListener接口来监视复选菜单。因此当复选框状态发生改变时,就会调用itemStateChanged()方法。

定义二级菜单

Menu m2=new Menu("Paste");

m2.add("Paste All");

m2.add("Paste Part");

弹出式菜单(PopupMenu)

弹出式菜单附着在某一个组件或容器上,一般它是不可见的,只有当用户用鼠标右键单击附着有弹出式菜单的组件时,这个菜单才“弹出”来显示

PopuMenu pm=new PopupMenu();

MenuItem item1=new MenuItem("copy");

Item1.addActionListener(this);

pm.add(item1);

TextArea ta=new TextArea();ta.add(pm);

对话框

自定义对话框

Dialog(Dialog owner) 创建主控对话框,指定其拥有者为另一对话框。

Dialog(Dialog ,String title) 同上,并加上标题。

Dialog(Dialog owener,String title,boolean modal) 创建对话框,指定其拥有者为另一个对话框,并可设置modal来指定是否要主控。

Dialog(Frame owner) 创建主控对话框,指定其拥有者为一窗口。

Dialog(Frame owner,boolean modal) 同上,但可设置modal来指定是否要主控。

Dialog(Frame owner,String title) 创建主控对话框,指定其拥有者为一窗口,并可设置标题。

Dialog(Frame owner,String title,boolean modal) 创建对话框,指定拥有者为一窗口,设置标题,并可设置modal来指定是否要主控。

void dispose() 销毁对话框对象。

String getTitle() 取得对话框的标题。

void hide() 隐藏对话框。

boolean isModal() 测试对话框是否为主控。

Boolean isResizable() 测试对话框是否可改变大小。

void setModal(boolean) 设置对话框为主控。

void setResizable(boolean resizable) 设置对话框是否可以改变大小。

void setTitle(String title)设置对话框的标题。

void show() 显示对话框。

对话框—文件对话框

FileDialog是Dialog类的子类,它创建的对象称为文件对话框。文件对话框是一个打开文件和保存文件的对话框窗口。文件对话框也必须依附一个窗口(Frame)对象。

FileDialog(Frame f,String s,int mode)

public String getDirectory()

public String getFile()

内部类

在一个类的内部嵌套定义的类称之为内部类(Inner Class)。

内部类也有自己的成员变量和成员方法。同样可以通过建立内部类的对象,去访问其成员变量和调用其成员方法。

内部类可作为其他类的成员,而且可访问它所在类的成员。

在实现图形界面中对鼠标单击、窗口事件、点击菜单等,需要同时实现多个监听器接口,使用内部类,即可以定义多个内部类去分别实现不同的监听器接口,使事件处理很方便。

参考文献:

1. 吕凤翥,马皓《java语言程序设计》.清华大学出版社.2013

2. 国家863中部软件孵化器《java从入门到精通》.人民邮电出版社.2010

相关推荐