Programming in Java 2008.3-2008.7 by Yan-jun Zhang,Department of Computer HanDan College.
邯郸学院计算机系 张延军
Lecture 7 Java GUI编程绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
OUTLINE
1,Java GUI编程简介
2,AWT
2.1 AWT简介
2.2 Component类
2.3 Container类
2.4 Graphics类
2.5 LayoutManager类
2.6 Java事件处理机制
2.7 Canvas类
2.8 Font类
2.9 Menu类
2.10 常用 AWT组件应用举例
Swing
3.1 Swing简介
3.2 Swing常用组件应用举例
4,Applet
4.1 Applet简介
4.2 Applet的执行过程
4.3 Java Applet模版
5,NetBeans5.5
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
1 Java GUI编程简介计算机用户界面的发展:
CUI(Character User Interface)
GUI(Graphics User Interface)
尽可能在屏幕上用形象的 图标和窗口 等来代表有用的资源和可启用的对象。在 Java中,GUI可以使用 AWT和 Swing来实现。
AWT (Abstract Window Toolkit)是 java中处理图形最基本的方式,
可以用来创建 Java的 Applet及窗口程序。由于 AWT中的每个组件都需要消耗系统资源,Sun对 AWT进行改进。 Swing由此出现。
Swing的组件均是由 AWT中的 Container类为基础开发设计的,故需学习 AWT技术。
Eclipse:IBM公司提出自己的构建用户界面程序包 SWT和 Jface,而没有采用 Sun公司的 AWT和 Swing。
Netbeans,Matisse是 NetBeans中新一代的 UI设计工具,Matisse将是一个支持 Swing显示布局的工具,通过 Matisse开发者可以轻松的设计基于 Swing的应用。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.1 AWT简介在 Java中,AWT(Abstract Windows ToolKit)是用来处理图形最基本的方式。 AWT包提供很多类,包括:
图形界面组件,Label,Button,Menu,TextField,TextArea等。
2D图形绘制组件,Dot,Line,Rectangle,Triangle等
布局管理器 LayoutManager:用来安排图形界面的位置。
事件处理 对象 Event-Handling:用来响应图形界面组件所触发的事件。
软件包 java.awt 包含用于 创建用户界面和绘制图形图像 的所有类。
AWT包中类的继承关系如下:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.1 AWT简介
Java.lang.Object
MenuComponent Component
MenuBar MenuItem Container Label Button TextComponent
Window Panel Textfield TextArea
Frame Dialog
FileDialog
CheckBox
Event Font ImageLayoutManagerColor
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.2 Component类
java.awt包中最核心、最基本的类就是 Component类 。 Component
是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
它是构成 Java图形用户界面的基础,大部分组件都是由该类派生出来的。
public abstract class Component extends Object
Component类是一个抽象类,其中定义了 组件所具有的一般功能,
基本的绘画支持 (paint,repaint,update等 )
字体和颜色等外形控制 (setFont,SetForeground等 )
大小和位置控制 (SetSize,SetLocation等 )
图像处理 (实现接口 ImageObserver )
组件状态控制 (SetEnable,isEnable,isVisible,isValid等 )
……
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.2 Component类
setSize():设置容器的大小
setLocation():设置容器左上角的位置
setBounds():设置容器的大小
setVisible():设置容器为可见,默认为不可见
pack():将容器调整到合适的大小和布局以适应放置的组件。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.2 Component类
Componet常见类的继承关系如下:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.3 Container类组件 Component不能独立地显示出来,必须将组件放在特定的对象中才能显示出来,这就是 包含组件的组件 —容器 ( Container )。
Container是 Component的子类,它本身也是一个组件,具有组件所有的性质。另外,它还具有 容纳其他组件和容器的功能,其它功能包括:
组件的管理,add()向其中添加一个组件,remove()删除其中的一个组件,…
布局管理,每个 Container类都和一个布局管理器相联,以确定其中组件的布局。 Container类可以通过 setLayout()方法设置某种布局方式。
两种主要的容器类型-顶级容器和中间容器
Window:可独立存在的顶级容器窗口
Panel:是一种无边框的 中间容器,通常用来组织界面中的其它组件
(还可以包括其它面板)。可作为容器容纳其它组件,但不能独立存在,
必须被添加到其它顶级容器中的中间容器 (如 Window 或 Applet)中。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.3 Container类
Frame类是 Window类的子类 -顶级容器有标题 (super(title)),可通过拖拉改变大小,可以最大化,最小化,
但是 不能关闭窗口 。 初始化时为不可见,可用 setVisible(true)使其显示出来。
列表 按钮 菜单中间容器
(Container)
窗口 (Window)
面板 (Panel)
顶级容器
(Container)
组件
(Component)
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.3 Container类
import java.awt.*;
public class MyPanelDemo extends Frame {
Panel pnl=new Panel();
public MyPanelDemo(String title){
super(title); //设置标题
this.init();
}
public void init(){
pnl.setSize(100,100);
pnl.setBackground(Color.yellow);
this.setLayout(null); //不设置布局管理器
this.setBackground(Color.blue);
this.setSize(200,200);
this.add(pnl); //把中间容器添加在顶级容器中
this.setVisible(true);
}
public static void main(String args[]){
MyPanelDemo demo=new MyPanelDemo("MyPanelDeom!");
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类在 Windows中,当窗口被激活时,系统需要重画窗口上曾被覆盖部分的图形图像 (标准组件的图形 )。 Java允许在 组件上绘制图形、打印文字、
显示图像 等,为此在 java.awt.Componet类中声明了 paint()和 repaint()方法用于显示和刷新图形。
public void paint(Graphics g):如果在程序中重写某组件的 paint()方法,系统将自动在该组件上绘制图形,程序中无须调用该方法 。
public void repaint(),程序中调用 repaint()方法时,系统将再次执行 paint()方法,重新绘制图形。
Graphics 类是所有图形上下文 Context的抽象基类,允许应用程序在组件 (已经在各种设备上实现)以及闭屏图像上进行绘制。 Graphics类是一种特殊的抽象类,它必须依赖于某一个组件,但无需通过 new实例化而可以直接使用。
1.声明的类是组件类 Component的子类,可直接重写 paint()方法,
通过 Graphics对象 g直接在组件上绘图:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类
import java.awt.*;
public class MyFrame extends Frame{
MyFrame(){
super("Java GUI窗口 ");
setSize(200,200);
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.drawLine(10,20,140,140);
g.drawString("中华人民共和国 ",100,100);
}
public static void main(String args[]){
new MyFrame().setVisible(true);;
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类
2.如果声明的类不是组件类 Component的子类:
则欲绘图的组件必须使用 getGraphics()方法获得一个包含有该组件显示外观信息的 Graphics对象然后可以在这个组件上进行绘图操作。
public Graphics getGraphics()
import java.awt.*;
public class My{
public static void main(String args[]){
Frame f=new Frame();
f.setSize(200,200);
f.setVisible(true);
f.getGraphics().drawString("test",50,50);
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类
Graphics类还提供了一系列的方法来绘制几何图形、文字、图象以及动画:
Lines,drawLine()
Rectangles,drawRect(),fillRect(),clearRect()
Raised or lowered rectangles,draw3DRect(),fill3DRect()
Round-edged rectangles,drawRoundRect(),fillRoundRect()
Ovals,drawOval() 和 fillOval()
Arcs,drawArc() 和 fillArc()
Polygons,drawPolygon() 和 fillPolygon()
Text,drawString()
Image,drawImage()
Animation,通过一个循环来完成绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类例程,code\四叶玫瑰线 \rose1.java
功能:四叶玫瑰线例程,DrawLineA.java
功能,Applet形式的画直线程序,实现了 MouseListener和
MouseMotionListener接口。只能保存最近一根直线。
例程,DrawLineA1.java:
功能,Applet形式的画直线程序,实现 MouseAdapter和
MouseMotionAdapter,它们是抽象类,称为事件裁剪器。可以从这两个类继承那些用得到的事件处理方法,其他的可以不继承。这两个派生类将作为内部类添加到主类中。只能保存最近一根直线。
例程,ReDrawAllLine.java
功能:将每一条直线的坐标保存到一个集合中,在 paint方法中取出该集合的每一条直线的坐标,逐一绘制。
例程,DrawImage.java
功能,GUI下显示图像。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 LayoutManager类布局是 Java中用来控制控件排列位置的一种界面管理系统。 Java没有提供 What you see is What you get!的 可视化界面设计 (如 Microsoft的
Visual系列,有部分 IDE实现了可视化界面设计 )。但 Java同样能设计出优秀的界面,而且在跨平台时表现得更有优势。
Java中提供了各种布局管理器类来管理各种组件在容器中的放置状态,
这些类都是实现了 LayoutManager接口的。
标准的布局管理器类有:
FlowLayout:在 FlowLayout中,你不必指定每个控件放在哪,
FlowLayout就会根据你添加控件的顺序依次放置控件,如果空间不够,
组件满一行后自动换行。
例程,layout\FlowWindow.java
功能:演示 FlowLayout
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 LayoutManager类
BorderLayout:将容器划分为 NORTH,WEST,EAST,SOUTH,
CENTER5个区域。 每个区域只能放一个控件 。我们将控件放入容器时,
必须指定控件放置的区域 。当改变容器大小时,NORTH,SOUTH区域只能改变宽度; WEST,EAST区域只能改变高度,而 CENTER区域的高度、
宽度均可改变。 当容器上放置的组件少于五个,没有放置组件的区域将被相邻的区域占用。 对 Frame和 Dialog来说,默认的布局管理器就是
BorderLayout。
例程,layout\BorderWindow.java
功能:演示 BorderLayout
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 LayoutManager类
GridLayout:将用户界面切割为棋盘一样 m行 n列的布局管理系统。如果我们要设计一个类似于 Windows中自带的计算器软件,GridLayout无疑是最佳选择。
例程,layout\Calculator.java
功能:演示 GridLayout
CardLayout:能实现将多个组件放在同一容器区域内的交替,相当于一摞卡片放在一起,在任何时候只有最上面的一个可见。
例程,layout\CardWindow.java
功能:演示 CardLayout
GridBagLayout:布局管理器之王,功能强大,使用复杂。在 Swing
中可以用更简单的办法来实现 GridBagLayout的功能。在实际项目工程中,
复杂的布局设计建议使用 Netbeans这样的集成开发环境。
GroupLayout,NetBeans提供的布局。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 Java事件处理机制在设计和实现 GUI过程中,有两个主要任务:
创建窗口并在其中添加各种组件,指定其属性和位置,从而构成 GUI
外观界面。
设置各种组件对不同事件的响应,从而实现 GUI和用户的交互。
Java采用委托事件模型:将事件的处理委托给独立的对象。这样使
GUI和程序逻辑分开。整个模型由 产生事件的对象-组件,事件对象,监听者对象 组成。
GUI组件 (产生事件的对象 )会在用户请求或发出命令产生相应的 事件,
将与该事件相关的信息封装在一个,事件对象,中传递给 监听者对象 。
监听者对象就是用来处理事件的对象,根据事件对象的相关信息进行相应的处理。要想收到事件发生的通知,必须中程序中向产生事件的对象注册 。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制
EventObject
ActionEvent AdjustmentEvent ComponentEvent TextEventItemEvent
AWT事件类的体系结构
FocusEvent ContainerEvent InputEvent PaintEventWindowEvent
MouseEvent KeyEvent
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制事件 (以 Event结尾 )与事件监听器 (Listener结尾 )的种类一一对应:
ActionListener:处理 ActionEvent事件对象 (按钮、列表 双击、单击 菜单等事件 )。
ComponentListener:处理 ComponentEvent(组件被 隐藏、移动、尺寸改变、显示 事件 )。
ContainerListener:处理在容器中 加入或删除 组件的事件。
FocusListener:处理 Focus(组件 获得或失去焦点 的事件 )。
KeyListener:处理 KeyEvent键盘 事件。
MouseListener:处理 MouseEvent(鼠标单击、进入、离开、按下 等事件 )。
MouseMotionListener:处理 MouseEvent(鼠标拖动、移动 的事件。 )
TextListener:处理 TextEvent(文本值 改变的事件 )。
WindowListener:处理 WindowEvent(窗口 激活,失去焦点,最小化,最大化,打开、关闭 等事件 )。
getSource():用来获取引发事件的对象名。 getActionCommand():用来获取引发事件动作的命令名。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
事件类
(以 Event结尾 )
监听者接口
(以 Listener结尾 )
监听者接口所提供的事件处理方法
(以事件类为参数 )
ActionEvent ActionListener actionPerformed(ActionEvent e)
AdjustmentEvent AdjustmentListener adjustmentValueChange(AdjustmentEvent e)
ItemEvent ItemListener itemStateChange(ItemEvent e )
KeyEvent KeyListener
keyType(KeyEvent e)
keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
MouseEvent MouseListenerMouseMotionListener
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
TextEvent TextListener textValueChange(TextEvent e )
WindowEvent windowListener
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowIconfied(WindowEvent e)
windowOpened(WindowEvent e)
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制通过一个实例来说明事件处理流程 (对一个按钮对象进行监听 ):
1.监听者对象 handler向 事件源对象 button(按钮对象 )注册,
button.addActionListener(new Handler());
2.按下按钮时,button对象会产生一个 ActionEvent的 事件对象 。
3.按钮把 事件对象传递给监听者 handler.
4.事件监听者 Handler要进行监听需要实现 AcitonListener接口,重写 actionPerformed()需要实现:
class Handler implements ActionListener{
public void actionPerformed(ActionEvent e){
… …
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制在 Java中事件处理方式:
实现 Listener接口,
使用 Adapter抽象类,
程序使用了 MouseListener和 MouseMotionListener接口,而我们必须 实现这两个接口中的所有方法,不管用得到用不到它们。程序中是将这些用不到的方法 以空方法的形式给出,即只给出方法的声明,不添加方法体,这使得程序中出现了多余的东西。
为了去掉这些多余的东西,我们可以利用 MouseAdapter和
MouseMotionAdapter,它们是抽象类,称为事件裁剪器。 你可以从这两个类继承那些用得到的事件处理方法,其他的可以不继承。 这两个派生类将作为内部类添加到主类中,
例程,DrawLineA.java 和 DrawLine1.java
功能,Applet形式的画直线程序,分别用 MouseListener和
MouseMotionListener接口,MouseAdapter和 MouseMotionAdapter
实现。只能保存最近一根直线。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.7 Canvas类画布 (Canvas):虽然在任何组件上均可绘制图形,但我们一般在容器上绘图,此外 Java提供了画布类作为绘制图形的区域。画布是一个空白区域,可以对各类事件进行监听,为了绘图,通常监听的是键盘和鼠标事件。
public class Canvasextends Componentimplements AccessibleCanvas
应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写 paint 方法,以便在 canvas 上执行自定义图形。
Canvas 类的常见方法:
Canvas()
public void paint(Graphics g)
public void repaint()
public void update(Graphics g)
例程,CanvasApp.java
实现了点、线的绘图功能。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.8 Font类
Font类用来表示字体,通过它可以在 GUI中使用多种系统支持的字体。
public Font(String name;int style;int size),name:字体名称。
style:Font.PLAIN;Font.BOLD;Font,ITALIC。 size:字体大小,以磅值为单位。
例程,FontTest.java
功能,GUI显示当前系统所有可用的字体。
The GraphicsEnvironment class describes the collection of GraphicsDevice
objects and Font objects available to a Java (tm) application on a particular
platform,
public static GraphicsEnvironment getLocalGraphicsEnvironment():
Returns the local GraphicsEnvironment,
public abstract String[] getAvailableFontFamilyNames():
Returns an array containing the names of all font families available in this
GraphicsEnvironment.
The Dimension class encapsulates the width and height of a component (in
integer precision) in a single object,
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.9 Menu类一个应用程序中,应该有一个菜单条菜单栏 ( JMenuBar ),是整个菜单和菜单项的容器。
一个菜单条通常会由多个菜单( JMenu)组成;
一个菜单通常又会是由菜单项( JMemuItem)组成的。
Menu类 也是一种重要的图形组件,只不过菜单类并不是由一般的
Component类派生的,而是从 MenuComponent类继承得到的。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.10 常用 AWT组件应用举例例程,componet/TestCheckBox.java
功能:演示 Checkbox组件的使用。
例程,componet/TestChoise.java
功能:演示下拉式列表 Choise的使用方法。
例程,componet/TestMenuBar.java
功能:演示 Menu菜单组件的使用。
例程,component/TestDialog.java
功能:演示对话框 Dialog的使用例程,componet/TestMenuBar.java
功能:演示 Menu菜单组件的使用。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
3.1 Swing简介
AWT虽然遵循 Java“Write Once,Run Anywhere!”的理念,但在不同的操作系统平台上显示不同的效果。 1998年推出 JDK1.2版本时,
Javax.swing被加入在 Java基础类库 (JFC:Java Foundation Class)中。
Swing拥有四倍于 AWT的用户界面组件 。
AWT与 Swing的比较:
新版的 Swing包可能与旧版本 不兼容
Swing包是建立在 AWT包的基础上,所以 完全舍弃 AWT包不太可能 。
AWT包的运行速度比 Swing快。
将 AWT组件改写为 Swing时,在很多情况下可以只在原有的 AWT组件的每一个类名前面 加,J”即可 。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
3.1 Swing简介
Container
Panel Window JComponent
JFrame
Frame Dialog
javax.swing包中类的体系结构
JDialog
AbstractButton JPanel JLabel JText
JToggleButton JButton JTextField JTextArea
JCheckBox JRadioButton
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
3.2 Swing组件简介顶层容器 是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。每一个窗口应用程序中有且只能有一个顶层容器控件,换句话说,顶层容器不能包括在其他的控件中。
在 Swing中,我们有三种可以使用的顶层容器,它们分别是,
JFrame:用来设计类似于 Windows系统中的窗口形式的应用程序。
JDialog:和 JFrame类似,只不过 JDialog是用来设计对话框。
JApplet:用来设计可以在嵌入在网页中的 Java小程序。
public boolean requestFocus(boolean temporary)请求此
Component 获取输入焦点。注意,不推荐使用此方法,因为其行为与平台有关。建议使用 requestFocusInWindow(boolean)。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
Swing组件简介
Swing常用图形组件,JFrame,JLabel,JButton,JCheckBox、
JComBox,JList,JTextFiled,JTextArea,JProgressBar,JTable、
JTree等 。
例程,Swing组件 \Combo.java
功能,GUI-Swing组件:下拉式列表框显示图像文件,
例程,Swing组件 \Progress.java
功能,GUI-Swing组件:演示进度条 JProgressBar的使用。
例程,Swing组件 \RGB调节 \
功能,Applet形式的 RGB调节例程,Swing组件 \DesktopTest.java
功能:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.1 Applet简介
Java程序的各种形态:
1,Application CUI/GUI:运行在单机 OS中
2,Applet,运行在客户端的浏览器中。
3,JSP/Servlet:运行在 Web服务器端的 Servlet容器中( Tomcat)
4,JavaBean
Applet能够在浏览器环境中运行的一段 Java代码
Applet与 Application的区别,
1,执行方式
2,程序开始
3,窗口的输出
4,等等绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.1 Applet简介
Java代码
import java.awt.Graphics;
import java.applet.Applet;
public class HelloWorld extends Applet {
public void paint(Graphics g){
g.drawString("Hello World",25,25);
}
}
HTML代码
<HTML>
<CENTER>
<applet code="HelloWorld.class" width=300 height=300>
</applet>
</CENTER>
</HTML>
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.2 Applet的执行过程
浏览器载入要访问的 HTML文件的地址
载入 HTML文件
载入 Applet中的字节码文件
启动 JVM执行 Applet
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.2 Applet的执行过程
<HTML>
<HEAD>
<TITLE>LifeCycle</TITLE>
</HEAD>
<applet code="ParaApplet.class" width=300 height=60>
</applet>
</HTML>
用浏览器 IE或 appletviewer打开 ParaApplet.html
浏览器插件 JVM在 Classpath中查找 ParaApplet.class并执行,显示在浏览器指定区域。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.2 Applet的执行过程绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
import java.applet.Applet;
import java.awt.Graphics;
public class LifeCycle extends Applet{
StringBuffer buffer;
public void init(){
buffer=new StringBuffer();
buffer.append("Applet 初始化 ……");repaint();
}
public void start(){
buffer.append("Applet 启动 ……");repaint();
}
public void stop(){
buffer.append("Applet 停止运行 ……");repaint();
}
public void destory(){
buffer.append("Applet 准备卸载 ……");repaint();
}
public void paint(Graphics g){
g.drawRect(0,0,getSize().width-1,getSize().height-1);
g.drawString(buffer.toString(),5,15);
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.3 Java Applet模版
package …… ; 零个或多个,必须是第一句。
import …… ; 引入类包,零个或多个,必须放在所有类定义之前
public class <classname> extends Applet{
attributeDefinition;// private int i=0;
public void init() {……}
public void start() {……}
public void stop() {……}
public void destroy() {……}
public void paint(Graphics g) {……}
}
classDefinition,零个或多个
InterfaceDefinition,零个或多个绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.4 Applet应用举例绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
Question And Answer
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
5.1 NetBeans简介
A,安装包的获取
B,网上教程:
http://gceclub.sun.com.cn/NetBeans/tutorials/guibuilder/quick
start-gui.html
C,Sun公司赠送的图书:
D,通过历时 15 分钟的快速入门指南,您可以学习有关使用 NetBeans
IDE 的基础知识。 NetBeans IDE 快速入门指南绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
选择 NetBeans的理由
IDE提高效率。
编辑器提高编码效率,自定义的代码缩写功能,同步显示 API代码自动补全功能,代码自动修正功能,代码错误的一键修复。
项目模版。
使用 Matisse进行用户界面设计。
方便的 Web开发与调试:集成 Tomcat5.5、集成 Struts和 JSF
易学易用的测试与调试功能。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
5.2 NetBeans掌握要点新建项目,Java源文件件必须在包中,包自动建立在项目的 SRC文件夹中。标准项目使用 IDE 生成的 Ant 生成脚本来生成、运行和调试项目。
常规:
1,Java应用程序:用于创建含主类的 J2SE项目
2,Java类库:用于创建不含主类的 J2SE项目。
3,基于现有源代码的 Java项目:将现有的 Java 应用程序导入到标准的
IDE 项目中。
Web:
1,Web应用程序:在标准的 IDE 项目中创建一个空的 Web 应用程序。
2,基于现有源代码的 Web应用程序:将现有的 Web 应用程序导入到标准的 Web 项目中。
3,样例,示例项目
GUI窗体示例,Antenna.java,ContactEditor.java,Find.java
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
菜单常用功能
Set Main Project
Porject Properties
Replace
Show Line Numbers
Surround With try-catch
Reformat Code
Comment/ UnComment,Ctrl+/
Rename
Build Main Project
Generate Javadoc For Project
Run Main Project
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
菜单常用功能
输入缩写后按 Tab,缩写会自动展开。
Alt_Enter提供自动修复方案。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例
1.新建一个 Java Bean类:和用户界面 Form的数据项一一对应。
Private属性及其 getter,setter方法。
2.使用 NetBeans Mattise生成 GUI界面:
3.建立存储数据的 Vector,HashTable,并增加实验数据。将 Jlist与
Vector关联,this.jList1.setListData(v);
4.反复用到的操作定义方法:
Card getCard(){}
void setCard(Card c){}
void clearAll(){}
5.编写组件的事件处理代码:
ListSelection,Item改变绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例
public boolean requestFocus(boolean temporary)请求此
Component 获取输入焦点。注意,不推荐使用此方法,因为其行为与平台有关。建议使用 requestFocusInWindow(boolean)。
6.操作的有序性:
浏览模式 mode=0;//保存无效,增加、删除、修改有效
增加模式 mode=1;//增加、删除、修改无效,保存有效
修改模式 mode=2;//增加、删除、修改无效,保存有效
保存时:要判断是增加模式还是修改模式的保存。
代码实现:
jButtonAdd.setEnabled(false);
jButtonDelete.setEnabled(false);
jButtonEdit.setEnabled(false);
jButtonSave.setEnabled(false);
jTextFieldName.setEnabled(false);
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例
7.用户输入数据有效性的判断(正则表达式):
不能为空
不能重复
长度
日期格式
电子邮件格式
8.为和数据库连接留下接口。
9.Project
不允许缺省包。 cn.edu.hdc
10.修改功能的实现:当向 Hashtable写入一个 Key- Value,假如 Key
已存在,则会用新值覆盖旧值。
邯郸学院计算机系 张延军
Lecture 7 Java GUI编程绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
OUTLINE
1,Java GUI编程简介
2,AWT
2.1 AWT简介
2.2 Component类
2.3 Container类
2.4 Graphics类
2.5 LayoutManager类
2.6 Java事件处理机制
2.7 Canvas类
2.8 Font类
2.9 Menu类
2.10 常用 AWT组件应用举例
Swing
3.1 Swing简介
3.2 Swing常用组件应用举例
4,Applet
4.1 Applet简介
4.2 Applet的执行过程
4.3 Java Applet模版
5,NetBeans5.5
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
1 Java GUI编程简介计算机用户界面的发展:
CUI(Character User Interface)
GUI(Graphics User Interface)
尽可能在屏幕上用形象的 图标和窗口 等来代表有用的资源和可启用的对象。在 Java中,GUI可以使用 AWT和 Swing来实现。
AWT (Abstract Window Toolkit)是 java中处理图形最基本的方式,
可以用来创建 Java的 Applet及窗口程序。由于 AWT中的每个组件都需要消耗系统资源,Sun对 AWT进行改进。 Swing由此出现。
Swing的组件均是由 AWT中的 Container类为基础开发设计的,故需学习 AWT技术。
Eclipse:IBM公司提出自己的构建用户界面程序包 SWT和 Jface,而没有采用 Sun公司的 AWT和 Swing。
Netbeans,Matisse是 NetBeans中新一代的 UI设计工具,Matisse将是一个支持 Swing显示布局的工具,通过 Matisse开发者可以轻松的设计基于 Swing的应用。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.1 AWT简介在 Java中,AWT(Abstract Windows ToolKit)是用来处理图形最基本的方式。 AWT包提供很多类,包括:
图形界面组件,Label,Button,Menu,TextField,TextArea等。
2D图形绘制组件,Dot,Line,Rectangle,Triangle等
布局管理器 LayoutManager:用来安排图形界面的位置。
事件处理 对象 Event-Handling:用来响应图形界面组件所触发的事件。
软件包 java.awt 包含用于 创建用户界面和绘制图形图像 的所有类。
AWT包中类的继承关系如下:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.1 AWT简介
Java.lang.Object
MenuComponent Component
MenuBar MenuItem Container Label Button TextComponent
Window Panel Textfield TextArea
Frame Dialog
FileDialog
CheckBox
Event Font ImageLayoutManagerColor
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.2 Component类
java.awt包中最核心、最基本的类就是 Component类 。 Component
是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
它是构成 Java图形用户界面的基础,大部分组件都是由该类派生出来的。
public abstract class Component extends Object
Component类是一个抽象类,其中定义了 组件所具有的一般功能,
基本的绘画支持 (paint,repaint,update等 )
字体和颜色等外形控制 (setFont,SetForeground等 )
大小和位置控制 (SetSize,SetLocation等 )
图像处理 (实现接口 ImageObserver )
组件状态控制 (SetEnable,isEnable,isVisible,isValid等 )
……
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.2 Component类
setSize():设置容器的大小
setLocation():设置容器左上角的位置
setBounds():设置容器的大小
setVisible():设置容器为可见,默认为不可见
pack():将容器调整到合适的大小和布局以适应放置的组件。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.2 Component类
Componet常见类的继承关系如下:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.3 Container类组件 Component不能独立地显示出来,必须将组件放在特定的对象中才能显示出来,这就是 包含组件的组件 —容器 ( Container )。
Container是 Component的子类,它本身也是一个组件,具有组件所有的性质。另外,它还具有 容纳其他组件和容器的功能,其它功能包括:
组件的管理,add()向其中添加一个组件,remove()删除其中的一个组件,…
布局管理,每个 Container类都和一个布局管理器相联,以确定其中组件的布局。 Container类可以通过 setLayout()方法设置某种布局方式。
两种主要的容器类型-顶级容器和中间容器
Window:可独立存在的顶级容器窗口
Panel:是一种无边框的 中间容器,通常用来组织界面中的其它组件
(还可以包括其它面板)。可作为容器容纳其它组件,但不能独立存在,
必须被添加到其它顶级容器中的中间容器 (如 Window 或 Applet)中。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.3 Container类
Frame类是 Window类的子类 -顶级容器有标题 (super(title)),可通过拖拉改变大小,可以最大化,最小化,
但是 不能关闭窗口 。 初始化时为不可见,可用 setVisible(true)使其显示出来。
列表 按钮 菜单中间容器
(Container)
窗口 (Window)
面板 (Panel)
顶级容器
(Container)
组件
(Component)
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.3 Container类
import java.awt.*;
public class MyPanelDemo extends Frame {
Panel pnl=new Panel();
public MyPanelDemo(String title){
super(title); //设置标题
this.init();
}
public void init(){
pnl.setSize(100,100);
pnl.setBackground(Color.yellow);
this.setLayout(null); //不设置布局管理器
this.setBackground(Color.blue);
this.setSize(200,200);
this.add(pnl); //把中间容器添加在顶级容器中
this.setVisible(true);
}
public static void main(String args[]){
MyPanelDemo demo=new MyPanelDemo("MyPanelDeom!");
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类在 Windows中,当窗口被激活时,系统需要重画窗口上曾被覆盖部分的图形图像 (标准组件的图形 )。 Java允许在 组件上绘制图形、打印文字、
显示图像 等,为此在 java.awt.Componet类中声明了 paint()和 repaint()方法用于显示和刷新图形。
public void paint(Graphics g):如果在程序中重写某组件的 paint()方法,系统将自动在该组件上绘制图形,程序中无须调用该方法 。
public void repaint(),程序中调用 repaint()方法时,系统将再次执行 paint()方法,重新绘制图形。
Graphics 类是所有图形上下文 Context的抽象基类,允许应用程序在组件 (已经在各种设备上实现)以及闭屏图像上进行绘制。 Graphics类是一种特殊的抽象类,它必须依赖于某一个组件,但无需通过 new实例化而可以直接使用。
1.声明的类是组件类 Component的子类,可直接重写 paint()方法,
通过 Graphics对象 g直接在组件上绘图:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类
import java.awt.*;
public class MyFrame extends Frame{
MyFrame(){
super("Java GUI窗口 ");
setSize(200,200);
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.drawLine(10,20,140,140);
g.drawString("中华人民共和国 ",100,100);
}
public static void main(String args[]){
new MyFrame().setVisible(true);;
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类
2.如果声明的类不是组件类 Component的子类:
则欲绘图的组件必须使用 getGraphics()方法获得一个包含有该组件显示外观信息的 Graphics对象然后可以在这个组件上进行绘图操作。
public Graphics getGraphics()
import java.awt.*;
public class My{
public static void main(String args[]){
Frame f=new Frame();
f.setSize(200,200);
f.setVisible(true);
f.getGraphics().drawString("test",50,50);
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类
Graphics类还提供了一系列的方法来绘制几何图形、文字、图象以及动画:
Lines,drawLine()
Rectangles,drawRect(),fillRect(),clearRect()
Raised or lowered rectangles,draw3DRect(),fill3DRect()
Round-edged rectangles,drawRoundRect(),fillRoundRect()
Ovals,drawOval() 和 fillOval()
Arcs,drawArc() 和 fillArc()
Polygons,drawPolygon() 和 fillPolygon()
Text,drawString()
Image,drawImage()
Animation,通过一个循环来完成绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.4 Graphics类例程,code\四叶玫瑰线 \rose1.java
功能:四叶玫瑰线例程,DrawLineA.java
功能,Applet形式的画直线程序,实现了 MouseListener和
MouseMotionListener接口。只能保存最近一根直线。
例程,DrawLineA1.java:
功能,Applet形式的画直线程序,实现 MouseAdapter和
MouseMotionAdapter,它们是抽象类,称为事件裁剪器。可以从这两个类继承那些用得到的事件处理方法,其他的可以不继承。这两个派生类将作为内部类添加到主类中。只能保存最近一根直线。
例程,ReDrawAllLine.java
功能:将每一条直线的坐标保存到一个集合中,在 paint方法中取出该集合的每一条直线的坐标,逐一绘制。
例程,DrawImage.java
功能,GUI下显示图像。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 LayoutManager类布局是 Java中用来控制控件排列位置的一种界面管理系统。 Java没有提供 What you see is What you get!的 可视化界面设计 (如 Microsoft的
Visual系列,有部分 IDE实现了可视化界面设计 )。但 Java同样能设计出优秀的界面,而且在跨平台时表现得更有优势。
Java中提供了各种布局管理器类来管理各种组件在容器中的放置状态,
这些类都是实现了 LayoutManager接口的。
标准的布局管理器类有:
FlowLayout:在 FlowLayout中,你不必指定每个控件放在哪,
FlowLayout就会根据你添加控件的顺序依次放置控件,如果空间不够,
组件满一行后自动换行。
例程,layout\FlowWindow.java
功能:演示 FlowLayout
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 LayoutManager类
BorderLayout:将容器划分为 NORTH,WEST,EAST,SOUTH,
CENTER5个区域。 每个区域只能放一个控件 。我们将控件放入容器时,
必须指定控件放置的区域 。当改变容器大小时,NORTH,SOUTH区域只能改变宽度; WEST,EAST区域只能改变高度,而 CENTER区域的高度、
宽度均可改变。 当容器上放置的组件少于五个,没有放置组件的区域将被相邻的区域占用。 对 Frame和 Dialog来说,默认的布局管理器就是
BorderLayout。
例程,layout\BorderWindow.java
功能:演示 BorderLayout
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 LayoutManager类
GridLayout:将用户界面切割为棋盘一样 m行 n列的布局管理系统。如果我们要设计一个类似于 Windows中自带的计算器软件,GridLayout无疑是最佳选择。
例程,layout\Calculator.java
功能:演示 GridLayout
CardLayout:能实现将多个组件放在同一容器区域内的交替,相当于一摞卡片放在一起,在任何时候只有最上面的一个可见。
例程,layout\CardWindow.java
功能:演示 CardLayout
GridBagLayout:布局管理器之王,功能强大,使用复杂。在 Swing
中可以用更简单的办法来实现 GridBagLayout的功能。在实际项目工程中,
复杂的布局设计建议使用 Netbeans这样的集成开发环境。
GroupLayout,NetBeans提供的布局。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.5 Java事件处理机制在设计和实现 GUI过程中,有两个主要任务:
创建窗口并在其中添加各种组件,指定其属性和位置,从而构成 GUI
外观界面。
设置各种组件对不同事件的响应,从而实现 GUI和用户的交互。
Java采用委托事件模型:将事件的处理委托给独立的对象。这样使
GUI和程序逻辑分开。整个模型由 产生事件的对象-组件,事件对象,监听者对象 组成。
GUI组件 (产生事件的对象 )会在用户请求或发出命令产生相应的 事件,
将与该事件相关的信息封装在一个,事件对象,中传递给 监听者对象 。
监听者对象就是用来处理事件的对象,根据事件对象的相关信息进行相应的处理。要想收到事件发生的通知,必须中程序中向产生事件的对象注册 。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制
EventObject
ActionEvent AdjustmentEvent ComponentEvent TextEventItemEvent
AWT事件类的体系结构
FocusEvent ContainerEvent InputEvent PaintEventWindowEvent
MouseEvent KeyEvent
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制事件 (以 Event结尾 )与事件监听器 (Listener结尾 )的种类一一对应:
ActionListener:处理 ActionEvent事件对象 (按钮、列表 双击、单击 菜单等事件 )。
ComponentListener:处理 ComponentEvent(组件被 隐藏、移动、尺寸改变、显示 事件 )。
ContainerListener:处理在容器中 加入或删除 组件的事件。
FocusListener:处理 Focus(组件 获得或失去焦点 的事件 )。
KeyListener:处理 KeyEvent键盘 事件。
MouseListener:处理 MouseEvent(鼠标单击、进入、离开、按下 等事件 )。
MouseMotionListener:处理 MouseEvent(鼠标拖动、移动 的事件。 )
TextListener:处理 TextEvent(文本值 改变的事件 )。
WindowListener:处理 WindowEvent(窗口 激活,失去焦点,最小化,最大化,打开、关闭 等事件 )。
getSource():用来获取引发事件的对象名。 getActionCommand():用来获取引发事件动作的命令名。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
事件类
(以 Event结尾 )
监听者接口
(以 Listener结尾 )
监听者接口所提供的事件处理方法
(以事件类为参数 )
ActionEvent ActionListener actionPerformed(ActionEvent e)
AdjustmentEvent AdjustmentListener adjustmentValueChange(AdjustmentEvent e)
ItemEvent ItemListener itemStateChange(ItemEvent e )
KeyEvent KeyListener
keyType(KeyEvent e)
keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
MouseEvent MouseListenerMouseMotionListener
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
TextEvent TextListener textValueChange(TextEvent e )
WindowEvent windowListener
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowIconfied(WindowEvent e)
windowOpened(WindowEvent e)
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制通过一个实例来说明事件处理流程 (对一个按钮对象进行监听 ):
1.监听者对象 handler向 事件源对象 button(按钮对象 )注册,
button.addActionListener(new Handler());
2.按下按钮时,button对象会产生一个 ActionEvent的 事件对象 。
3.按钮把 事件对象传递给监听者 handler.
4.事件监听者 Handler要进行监听需要实现 AcitonListener接口,重写 actionPerformed()需要实现:
class Handler implements ActionListener{
public void actionPerformed(ActionEvent e){
… …
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.6 Java事件处理机制在 Java中事件处理方式:
实现 Listener接口,
使用 Adapter抽象类,
程序使用了 MouseListener和 MouseMotionListener接口,而我们必须 实现这两个接口中的所有方法,不管用得到用不到它们。程序中是将这些用不到的方法 以空方法的形式给出,即只给出方法的声明,不添加方法体,这使得程序中出现了多余的东西。
为了去掉这些多余的东西,我们可以利用 MouseAdapter和
MouseMotionAdapter,它们是抽象类,称为事件裁剪器。 你可以从这两个类继承那些用得到的事件处理方法,其他的可以不继承。 这两个派生类将作为内部类添加到主类中,
例程,DrawLineA.java 和 DrawLine1.java
功能,Applet形式的画直线程序,分别用 MouseListener和
MouseMotionListener接口,MouseAdapter和 MouseMotionAdapter
实现。只能保存最近一根直线。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.7 Canvas类画布 (Canvas):虽然在任何组件上均可绘制图形,但我们一般在容器上绘图,此外 Java提供了画布类作为绘制图形的区域。画布是一个空白区域,可以对各类事件进行监听,为了绘图,通常监听的是键盘和鼠标事件。
public class Canvasextends Componentimplements AccessibleCanvas
应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写 paint 方法,以便在 canvas 上执行自定义图形。
Canvas 类的常见方法:
Canvas()
public void paint(Graphics g)
public void repaint()
public void update(Graphics g)
例程,CanvasApp.java
实现了点、线的绘图功能。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.8 Font类
Font类用来表示字体,通过它可以在 GUI中使用多种系统支持的字体。
public Font(String name;int style;int size),name:字体名称。
style:Font.PLAIN;Font.BOLD;Font,ITALIC。 size:字体大小,以磅值为单位。
例程,FontTest.java
功能,GUI显示当前系统所有可用的字体。
The GraphicsEnvironment class describes the collection of GraphicsDevice
objects and Font objects available to a Java (tm) application on a particular
platform,
public static GraphicsEnvironment getLocalGraphicsEnvironment():
Returns the local GraphicsEnvironment,
public abstract String[] getAvailableFontFamilyNames():
Returns an array containing the names of all font families available in this
GraphicsEnvironment.
The Dimension class encapsulates the width and height of a component (in
integer precision) in a single object,
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.9 Menu类一个应用程序中,应该有一个菜单条菜单栏 ( JMenuBar ),是整个菜单和菜单项的容器。
一个菜单条通常会由多个菜单( JMenu)组成;
一个菜单通常又会是由菜单项( JMemuItem)组成的。
Menu类 也是一种重要的图形组件,只不过菜单类并不是由一般的
Component类派生的,而是从 MenuComponent类继承得到的。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
2.10 常用 AWT组件应用举例例程,componet/TestCheckBox.java
功能:演示 Checkbox组件的使用。
例程,componet/TestChoise.java
功能:演示下拉式列表 Choise的使用方法。
例程,componet/TestMenuBar.java
功能:演示 Menu菜单组件的使用。
例程,component/TestDialog.java
功能:演示对话框 Dialog的使用例程,componet/TestMenuBar.java
功能:演示 Menu菜单组件的使用。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
3.1 Swing简介
AWT虽然遵循 Java“Write Once,Run Anywhere!”的理念,但在不同的操作系统平台上显示不同的效果。 1998年推出 JDK1.2版本时,
Javax.swing被加入在 Java基础类库 (JFC:Java Foundation Class)中。
Swing拥有四倍于 AWT的用户界面组件 。
AWT与 Swing的比较:
新版的 Swing包可能与旧版本 不兼容
Swing包是建立在 AWT包的基础上,所以 完全舍弃 AWT包不太可能 。
AWT包的运行速度比 Swing快。
将 AWT组件改写为 Swing时,在很多情况下可以只在原有的 AWT组件的每一个类名前面 加,J”即可 。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
3.1 Swing简介
Container
Panel Window JComponent
JFrame
Frame Dialog
javax.swing包中类的体系结构
JDialog
AbstractButton JPanel JLabel JText
JToggleButton JButton JTextField JTextArea
JCheckBox JRadioButton
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
3.2 Swing组件简介顶层容器 是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。每一个窗口应用程序中有且只能有一个顶层容器控件,换句话说,顶层容器不能包括在其他的控件中。
在 Swing中,我们有三种可以使用的顶层容器,它们分别是,
JFrame:用来设计类似于 Windows系统中的窗口形式的应用程序。
JDialog:和 JFrame类似,只不过 JDialog是用来设计对话框。
JApplet:用来设计可以在嵌入在网页中的 Java小程序。
public boolean requestFocus(boolean temporary)请求此
Component 获取输入焦点。注意,不推荐使用此方法,因为其行为与平台有关。建议使用 requestFocusInWindow(boolean)。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
Swing组件简介
Swing常用图形组件,JFrame,JLabel,JButton,JCheckBox、
JComBox,JList,JTextFiled,JTextArea,JProgressBar,JTable、
JTree等 。
例程,Swing组件 \Combo.java
功能,GUI-Swing组件:下拉式列表框显示图像文件,
例程,Swing组件 \Progress.java
功能,GUI-Swing组件:演示进度条 JProgressBar的使用。
例程,Swing组件 \RGB调节 \
功能,Applet形式的 RGB调节例程,Swing组件 \DesktopTest.java
功能:
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.1 Applet简介
Java程序的各种形态:
1,Application CUI/GUI:运行在单机 OS中
2,Applet,运行在客户端的浏览器中。
3,JSP/Servlet:运行在 Web服务器端的 Servlet容器中( Tomcat)
4,JavaBean
Applet能够在浏览器环境中运行的一段 Java代码
Applet与 Application的区别,
1,执行方式
2,程序开始
3,窗口的输出
4,等等绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.1 Applet简介
Java代码
import java.awt.Graphics;
import java.applet.Applet;
public class HelloWorld extends Applet {
public void paint(Graphics g){
g.drawString("Hello World",25,25);
}
}
HTML代码
<HTML>
<CENTER>
<applet code="HelloWorld.class" width=300 height=300>
</applet>
</CENTER>
</HTML>
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.2 Applet的执行过程
浏览器载入要访问的 HTML文件的地址
载入 HTML文件
载入 Applet中的字节码文件
启动 JVM执行 Applet
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.2 Applet的执行过程
<HTML>
<HEAD>
<TITLE>LifeCycle</TITLE>
</HEAD>
<applet code="ParaApplet.class" width=300 height=60>
</applet>
</HTML>
用浏览器 IE或 appletviewer打开 ParaApplet.html
浏览器插件 JVM在 Classpath中查找 ParaApplet.class并执行,显示在浏览器指定区域。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.2 Applet的执行过程绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
import java.applet.Applet;
import java.awt.Graphics;
public class LifeCycle extends Applet{
StringBuffer buffer;
public void init(){
buffer=new StringBuffer();
buffer.append("Applet 初始化 ……");repaint();
}
public void start(){
buffer.append("Applet 启动 ……");repaint();
}
public void stop(){
buffer.append("Applet 停止运行 ……");repaint();
}
public void destory(){
buffer.append("Applet 准备卸载 ……");repaint();
}
public void paint(Graphics g){
g.drawRect(0,0,getSize().width-1,getSize().height-1);
g.drawString(buffer.toString(),5,15);
}
}
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.3 Java Applet模版
package …… ; 零个或多个,必须是第一句。
import …… ; 引入类包,零个或多个,必须放在所有类定义之前
public class <classname> extends Applet{
attributeDefinition;// private int i=0;
public void init() {……}
public void start() {……}
public void stop() {……}
public void destroy() {……}
public void paint(Graphics g) {……}
}
classDefinition,零个或多个
InterfaceDefinition,零个或多个绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
4.4 Applet应用举例绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
Question And Answer
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
5.1 NetBeans简介
A,安装包的获取
B,网上教程:
http://gceclub.sun.com.cn/NetBeans/tutorials/guibuilder/quick
start-gui.html
C,Sun公司赠送的图书:
D,通过历时 15 分钟的快速入门指南,您可以学习有关使用 NetBeans
IDE 的基础知识。 NetBeans IDE 快速入门指南绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
选择 NetBeans的理由
IDE提高效率。
编辑器提高编码效率,自定义的代码缩写功能,同步显示 API代码自动补全功能,代码自动修正功能,代码错误的一键修复。
项目模版。
使用 Matisse进行用户界面设计。
方便的 Web开发与调试:集成 Tomcat5.5、集成 Struts和 JSF
易学易用的测试与调试功能。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
5.2 NetBeans掌握要点新建项目,Java源文件件必须在包中,包自动建立在项目的 SRC文件夹中。标准项目使用 IDE 生成的 Ant 生成脚本来生成、运行和调试项目。
常规:
1,Java应用程序:用于创建含主类的 J2SE项目
2,Java类库:用于创建不含主类的 J2SE项目。
3,基于现有源代码的 Java项目:将现有的 Java 应用程序导入到标准的
IDE 项目中。
Web:
1,Web应用程序:在标准的 IDE 项目中创建一个空的 Web 应用程序。
2,基于现有源代码的 Web应用程序:将现有的 Web 应用程序导入到标准的 Web 项目中。
3,样例,示例项目
GUI窗体示例,Antenna.java,ContactEditor.java,Find.java
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
菜单常用功能
Set Main Project
Porject Properties
Replace
Show Line Numbers
Surround With try-catch
Reformat Code
Comment/ UnComment,Ctrl+/
Rename
Build Main Project
Generate Javadoc For Project
Run Main Project
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
菜单常用功能
输入缩写后按 Tab,缩写会自动展开。
Alt_Enter提供自动修复方案。
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例
1.新建一个 Java Bean类:和用户界面 Form的数据项一一对应。
Private属性及其 getter,setter方法。
2.使用 NetBeans Mattise生成 GUI界面:
3.建立存储数据的 Vector,HashTable,并增加实验数据。将 Jlist与
Vector关联,this.jList1.setListData(v);
4.反复用到的操作定义方法:
Card getCard(){}
void setCard(Card c){}
void clearAll(){}
5.编写组件的事件处理代码:
ListSelection,Item改变绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例
public boolean requestFocus(boolean temporary)请求此
Component 获取输入焦点。注意,不推荐使用此方法,因为其行为与平台有关。建议使用 requestFocusInWindow(boolean)。
6.操作的有序性:
浏览模式 mode=0;//保存无效,增加、删除、修改有效
增加模式 mode=1;//增加、删除、修改无效,保存有效
修改模式 mode=2;//增加、删除、修改无效,保存有效
保存时:要判断是增加模式还是修改模式的保存。
代码实现:
jButtonAdd.setEnabled(false);
jButtonDelete.setEnabled(false);
jButtonEdit.setEnabled(false);
jButtonSave.setEnabled(false);
jTextFieldName.setEnabled(false);
绪 论
Porgramming in Java 2008.3-2008.7 by Yanjun Zhang,Department of Computer HanDan Collage.
一个 NetBeans-GUI综合实例
7.用户输入数据有效性的判断(正则表达式):
不能为空
不能重复
长度
日期格式
电子邮件格式
8.为和数据库连接留下接口。
9.Project
不允许缺省包。 cn.edu.hdc
10.修改功能的实现:当向 Hashtable写入一个 Key- Value,假如 Key
已存在,则会用新值覆盖旧值。