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()画实心圆。
Java中的AWT文字、绘图和图像功能_父类
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); // 画一幅图像
        }
    }
}

效果图:

Java中的AWT文字、绘图和图像功能_加载_02