Java图形与文本(17)

实例017  缩放图形

实例说明

本实例演示在Java中绘制图形时,如何对图形进行缩放,包括对图形进行放大、缩小和还原等操作。运行程序,效果如图1.17所示,用户可以通过单击窗体中的“放大”、“缩小”和“还原”按钮,对窗体上的图形进行相应操作。

关键技术

本实例主要是通过在JPanel类的子类中,重写JComponent类的paint()方法,并在该方法中使用Graphics2D类的scale()方法来实现的。

使用Graphics2D类的scale()方法,可以实现图形的缩放,该方法的定义如下:

public abstract void scale(double sx, double sy)

参数说明

? sx:与原图形x坐标值相乘的量,如果sx大于1.0,则在X坐标轴上放大原图形;如果sx小于1.0,则在X坐标轴上缩小原图形。

? sy:与原图形y坐标值相乘的量,如果sy大于1.0,则在Y坐标轴上放大原图形;如果sy小于1.0,则在Y坐标轴上缩小原图形。

设计过程

(1)新建一个项目。

(2)在项目中创建一个继承JFrame类的ZoomShapeFrame窗体类。

(3)在ZoomShapeFrame窗体类中,创建内部面板类ZoomShapePanel,并重写JComponent类的paint()方法,在该方法中使用Graphics2D类的scale()方法缩放图形。

(4)将内部面板类ZoomShapePanel的实例,添加到窗体类ZoomShapeFrame的内容面板上,用于在窗体上显示缩放后的图形,代码如下:

class ZoomShapePanel extends JPanel {  // 创建内部面板类

    public void paint(Graphics g) {  // 重写paint()方法

        Graphics2D g2 = (Graphics2D) g;  // 获得Graphics2D对象

        Rectangle2D.Float rect = new Rectangle2D.Float(120, 50, 80, 50); // 创建矩形对象

        BasicStroke stroke = new BasicStroke(10);  // 创建宽度是10的笔画对象

        g2.setStroke(stroke); // 设置笔画对象

        g2.clearRect(0, 0, 338, 220);   // 清除原有内容

        if (flag == 0) {

            g2.draw(rect); // 绘制原矩形

        } else if (flag == 1) {

            g2.scale(1.3, 1.3); // 放大1.3倍

            g2.draw(rect); // 绘制矩形

        } else if (flag == 2) {

            g2.scale(0.5, 0.5); // 缩小0.5倍

            g2.draw(rect); // 绘制矩形

        }

    }

}

U 注意:上面代码中的flag是一个标记变量,当该变量的值为0时,图形显示为原来的大小;为1时,对图形进行放大;为2时,对图形进行缩小。

秘笈心法

心法领悟017:复杂问题简单化。

在程序设计中,当某些操作相关联,而且实现起来比较困难时,可以通过定义标记变量将复杂问题简单化。方法是,使用if条件语句对标记变量的不同取值进行判断,以实现不同的操作,如本实例就使用了标记变量flag,实现了对图形的缩放操作。

读书导航