Java中的AWT文字、绘图和图像功能
1.创建一个类包含一个静态
f
r
a
m
e
frame
frame成员,和
p
a
n
e
l
panel
panel(面板)成员。
2.创建两个内部类分别实现绘图和加载图像的功能,将其作为面板的子类添加到
f
r
a
m
e
frame
frame结构里。
3.绘图类重写父类
p
a
n
e
l
panel
panel的
p
a
i
n
t
(
)
paint()
paint()方法。
G
r
a
p
h
i
c
s
Graphics
Graphics 类的常用方法:
1.
s
e
t
F
o
n
t
(
)
setFont()
setFont()方法,设置字体格式。
2.插入文字
d
r
a
w
S
t
r
i
n
g
(
S
t
r
i
n
g
,
p
o
s
x
,
p
o
s
y
)
drawString(String,pos_x,pos_y)
drawString(String,posx,posy)
3.
s
e
t
C
o
l
o
r
(
)
setColor()
setColor()设置画图的颜色
4.
d
r
a
w
l
O
v
a
l
(
p
o
s
x
,
p
o
s
y
,
w
i
d
t
h
,
h
e
i
g
h
t
)
drawlOval(pos_x,pos_y,width,height)
drawlOval(posx,posy,width,height)画圆,用一个矩形包住。
5.
f
i
l
l
O
v
a
l
(
)
fillOval()
fillOval()画实心圆。
6.加载图像:使用
T
o
o
l
k
i
t
.
g
e
t
D
e
f
a
u
l
t
T
o
o
l
k
i
t
(
)
.
g
e
t
I
m
a
g
e
(
s
r
c
)
Toolkit.getDefaultToolkit().getImage(src)
Toolkit.getDefaultToolkit().getImage(src)创建一个
i
m
a
g
e
image
image对象,然后调用
G
r
a
p
h
i
c
s
Graphics
Graphics类的
d
r
a
w
I
m
a
g
e
(
i
m
a
g
e
,
x
,
y
,
w
,
h
,
o
b
s
e
r
v
e
r
)
drawImage(image,x,y,w,h,observer)
drawImage(image,x,y,w,h,observer)方法即可。
package Exp6;
/*
* 本例的顶层容器Frame里没有添加中间容器Panel,关闭窗口需要添加对Frame添加监听器
* AWT控件文本(如Label)为中文时有乱码,而使用Swing对应 控件则没有乱码
* 顶层容器Frame默认的布局是BorderLayout(边界布局,划分为“东南西北中”五个部分)
*/
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestAWT2{
static Frame frame;
Panel panel; // FlowLayout是Panel的默认布局
Image image;
public static void main(String []args) {
frame = new Frame("test AWT");
//Frame 的构造方法可以用标题作为参数,作为最初的标题
frame.setLayout(new GridLayout(1, 2)); // 对JFrame使用格点布局
frame.setVisible(true); //设置窗口可见
frame.setTitle("文字、图形绘制图与图像加载"); // 重新设置窗口标题
frame.setLocation(200, 300); //窗口在电脑屏幕上的显示位置
frame.setSize(700, 350); //设置窗口大小
frame.setResizable(false); //设置窗口大小不可调节;默认可调节
TestAWT2.DrawingPanel mPanel = new TestAWT2().new DrawingPanel(); // 实例化内部类对象
TestAWT2.PicturePanel mPanel2 = new TestAWT2().new PicturePanel(); // 实例化内部类对象
frame.add(mPanel);// 将Panel添加到Frame
frame.add(mPanel2);
//panel 是最简单的容器类
frame.addWindowListener(new WindowAdapter() { // JFame关闭简单些
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
class DrawingPanel extends Panel { // 绘图;内部类
@Override
public void paint(Graphics g) {
super.paint(g); // 重写父类方法paint()
System.out.println("调用绘图的paint()方法"); //绘图,此方法仅被执行一次
g.setFont(new Font("楷体", Font.BOLD, 20));
g.drawString("笑脸娃娃", 170, 30); //插入文字
g.setColor(Color.black);
g.drawOval(130, 50, 190, 200);
// g.fillOval(165, 120, 20, 20); // 左眼
// g.fillOval(265, 120, 20, 20); // 右眼
g.drawArc(155, 100, 40, 45, 45, 90); // 左眉
g.drawArc(255, 100, 40, 45, 45, 90); // 右眉
g.setColor(Color.red);
g.drawArc(130, -65, 185, 255, -45, -90); // 口
g.drawArc(130, -190, 185, 400, -45, -90); // 口
}
}
class PicturePanel extends Panel { // 加载图像;内部类
@Override
public void paint(Graphics g) {
super.paint(g); // 重写父类方法paint()
System.out.println("调用加载图像的paint()方法"); //首次加载,paint()方法被执行多次
image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("./hh.jpg"));
//image = Toolkit.getDefaultToolkit().getImage("/media/picture.jpg"); //不行
g.drawImage(image, 0, 0, 230, 230, this); // 画一幅图像
}
}
}
效果图: