1. 绘制图形?
答:对于一个一个GUI组件,可用getGraphics获得一个Graphics对象,它相当于组件的绘图环境,利用它可以进行各种绘图操作。例如,用鼠标单击画图:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class SimpleMouseWidthVector extends Applet{
private java.util.Vector points = new java.util.Vector();
public void init() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
points.add(new Point(e.getX(),e.getY()));
repaint();
}
});
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
for (int i = 0; i < points.size(); i++) {
Point p=(Point)points.elementAt(i);
g.drawString("x", p.x, p.x);
}
}
public static void main(String[] args) {
Frame frame = new Frame("MouseClick");
SimpleMouseWidthVector p = new SimpleMouseWidthVector();
p.init();
p.start();
frame.add("Center", p);
frame.setSize(400, 300);
frame.setVisible(true);
}
}
画一朵亮花:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Draw_r_cos2th extends Applet{
public void paint(Graphics g) {
double w=getSize().width/2;
double h=getSize().height/2;
g.setColor(Color.blue);
for( double i = 0; i < 10; i+=0.003) {
double r = Math.cos(16*i)*h;
double x = r * Math.cos(i) + w;
double y = r * Math.sin(i) + h;
g.drawOval((int)x-1, (int)y-1, 3, 3);
}
}
public static void main(String[] args) {
Frame f = new Frame("Draw");
Draw_r_cos2th p = new Draw_r_cos2th();
p.init();
p.start();
f.add(p);
f.setSize(400, 300);
f.show();
}
}
2. 显示文字?
答:Graphics类的方法drawString()可以在屏幕指定位置显示一个字符串,另外还有一个类Font,它有更加丰富多彩和避震精确的字体显示效果,包含字体类型、字号和颜色。例如,显示全部字体的名字,类型为PLAIN,字号为17,颜色为蓝色:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class DrawFonts extends Applet{
public void paint(Graphics g) {
g.setColor(Color.BLUE);
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
Font[] fonts = ge.getAllFonts();
for (int i = 0; i < fonts.length; i++) {
String name = fonts[i].getName();
g.setFont(new Font(name, Font.PLAIN ,17));
g.drawString(name, 50, 20*i);
}
}
public static void main(String[] args) {
Frame f = new Frame("Drawing");
DrawFonts p = new DrawFonts();
p.init();
p.start();
f.add(p);
f.setSize(400, 300);
f.show();
}
}
3. 显示图形和及实现动画?
答:由于图像的数据量要远远大于图形,所以一般不在程序中自行绘制图像,而是把已经存在于本机硬盘或网络某地的二进制图像文件直接调入内存。
Java中可用Graphics类的drawImage()方法显示图像。
用Java实现动画的原理和放映动画片类似,取若干图像或图片,顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
public class DrawImageAnimator extends Frame{
private Image[] images;
private int curImages;
private boolean bStop;
private MyThread thread;
public DrawImageAnimator(String s) {
super(s);
final String dir = "图像组路径";
String[] files = new File(dir).list();
int num = files.length<=10?files.length:10;
images = new Image[num];
for( int i = 0; i < num; i++) {
images[i] = Toolkit.getDefaultToolkit().createImage(
dir+"\\"+files[i]);
}
setSize(400, 700);
show();
thread = new MyThread();
thread.start();
}
public void paint(Graphics g) {
g.drawImage(images[curImages], 0, 0, this);
}
class MyThread extends Thread{
public void run() {
while(!bStop) {
repaint();
try {
sleep(1000);
}catch (InterruptedException e) {}
curImages++;
if(curImages==images.length)
curImages=0;
}
}
}
public static void main(String[] args) {
Object f = new DrawImageAnimator("DrawImageAnimator");
}
}