一、Swing与AWT
1、早期版本的AWT组件:
Ø 在java.awt包里,包括Button、Checkbox、Scrollbar等,都是Component类的子类
Ø 大部分含有native code,所以随操作系统平台的不同会显示出不同的样子,而不能进行更改,是重量级组件(heavyweight components)
Ø 没有弹性、缺乏效率
2、较新的Swing组件
Ø 在javax.swing包里,类的名称都是在原来AWT组件名称前加上J,例如JButton、JCheckBox、JScrollbar等,都是JComponent类的子类
Ø Java1.2推出,架构在 AWT 之上,是AWT的扩展而不是取代
Ø 完全是由java语言编写的,其外观和功能不依赖于任何由宿主平台的窗口系统所提供的代码,是轻量级组件(lightweight components)
Ø 可提供更丰富的视觉感受,被越来越多地使用。
二、JDialog 实现一个二级窗口(对话框)
public void setModal(boolean b):指定此 dialog 是否应该是有模式的。
采用内部类更方便,程序可改为:
三、Applet小应用程序: 在浏览器窗口中实现一个Applet显示区域
1、 特点:运行于支持Java的Web浏览器中;浏览器的解释器把字节码转换成和机器匹配的指令,在网页中执行小程序;Applet和Application的差别:运行环境的不同,小应用程序总是放在Web浏览器的图形用户界面中。
2、 Applet程序的结构模式:
import java.applet.Applet;
public class 类名 extends Applet
{
……
}
(或继承JApplet, Japplet属于javax.swing包)
3、五个事件驱动执行的方法:
public void init() {}//初始化方法:Applet的字节码文件从WWW服务器端下载后,浏览器将创建一个Applet类的实例并调用它从Applet类那里继承来的init()方法
public void start() {}//开始执行方法:执行init()方法后,接着将自动调用start()方法启动运行该实例的主流程
public void paint( Graphics g ) {}//绘画方法:当Applet初启动后或浏览器窗口改变时或Applet的其他相关方法被调用时系统将调用paint()重新描绘自己的界面。
public void stop() {}//停止执行方法:当用户浏览其他WWW页或切换到其他系统时,系统将调用该方法
public void destroy(){} //退出方法:当用户退出浏览器时,系统将调用该方法
例:
import java.awt.Graphics;
import javax.swing.JApplet;
public class Ex9_1 extends JApplet{
public void paint(Graphics g) { //重载JApplet类的paint方法
//参数是Graphics类的对象,是由浏览器传递过来的
super.paint(g); //调用其超类JApplet类的paint方法
g.drawString("This is a Java Applet!",25,25);
}
}
4、HTML中applet标记的使用
<APPLET
[ARCHIVE = archiveList ]
[CODEBASE = codebaseURL]
CODE = appletFile
[ALT = alternateText]
[NAME = appletInstanceName]
WIDTH = pixels HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels] [HSPACE = pixels]
>
[< PARAM NAME = appletParameter1 VALUE = value >]
[< PARAM NAME = appletParameter2 VALUE = value >]
. . .
[alternateHTML]
</APPLET>
例1:
<html>
<applet code="Ex9_1.class" width="300" height="45">
</applet>
</html>
5、浏览Applet,即浏览嵌入有Applet的html文件:
用Ie打开html文件或用JDK工具:appletviewer html文件
四、使用Graphics类绘图
publicclass Ex9_2 extends JFrame {
public Ex9_2() //构造方法,创建窗口
{
super( "演示字体、颜色、绘图" ); //调用基类构造方法,设置窗口标题
setSize( 480, 250 ); //设置窗口大小
setVisible( true ); //显示窗口
}
publicvoid paint( Graphics g ) //
{
// super.paint( g ); // call superclass's paint method
g.setFont( new Font( "SansSerif", Font.BOLD, 12 ) ); //设置字体
g.setColor(Color.blue); //设置颜色
g.drawString("字体ScanSerif,粗体,12号,蓝色",20,50); //绘制字符串
g.setFont( new Font( "Serif", Font.ITALIC, 14 ) );
g.setColor(new Color(255,0,0));
g.drawString( " 字体Serif,斜体,14号,红色", 250, 50 );
g.drawLine(20,60,460,60); //绘制直线
g.setColor(Color.green);
g.drawRect(20,70,100,50); //绘制空心矩形
g.fillRect(130,70,100,50); //绘制实心矩形
g.setColor(Color.yellow);
g.drawRoundRect(240,70,100,50,50,50); //绘制空心圆角矩形
g.fillRoundRect(350,70,100,50,50,50); //绘制实心圆角矩形
g.setColor(Color.cyan);
g.draw3DRect(20,130,100,50,true); //绘制有三维突起效果的空心矩形
g.fill3DRect(130,130,100,50,false); //绘制有三维凹陷效果的实心矩形
g.setColor(Color.pink);
g.drawOval(240,130,100,50); //绘制空心椭圆
g.fillOval(350,130,100,50); //绘制实心椭圆
g.setColor(new Color(0,120,20));
g.drawArc(20,190,100,50,0,90); //绘制一段圆弧
g.fillArc(130,190,100,50,0,90); //绘制扇形,扇形由圆弧及两半径圈定
g.setColor(Color.black);
int xValues[]={250,280,290,300,330,310,320,290,260,270};
int yValues[]={210,210,190,210,210,220,230,220,230,220};
g.drawPolygon(xValues,yValues,10); //绘制空心多边形
int xValues2[]={360,390,400,410,440,420,430,400,370,380};
g.fillPolygon(xValues2,yValues,10); //绘制实心多边形
} // end method paint
publicstaticvoid main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true); //设置窗口的外观感觉为Java默认
Ex9_2 application = new Ex9_2(); //创建Ex9_2类的一个实例
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}
五、处理鼠标事件
事件源 |
事件对象 |
事件监听器 |
JFrame |
MouseEvent WindowEvent |
MouseListener WindowListener |
MouseListener监听器必须实现如上5个方法:
(1)public class Lx7_3 extends JApplet implements MouseListener
(2)this.addMouseListener(this);
(3)publicvoid mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
mx=e.getX();my=e.getY();
repaint();
}