Java图形与文本(18)-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

Java图形与文本(18)

简介:     实例018  旋转图形 实例说明 本实例演示在Java中绘制图形时,如何对图形进行旋转。运行程序,单击窗体上的“顺时针”按钮,可以将图形顺时针旋转,效果如图1.18所示,用户还可以通过单击“逆时针”和“还原”按钮,对窗体上的图形进行逆时针旋转和还原等操作。

 

实例018  旋转图形

实例说明

本实例演示在Java中绘制图形时,如何对图形进行旋转。运行程序,单击窗体上的“顺时针”按钮,可以将图形顺时针旋转,效果如图1.18所示,用户还可以通过单击“逆时针”和“还原”按钮,对窗体上的图形进行逆时针旋转和还原等操作。

关键技术

 

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

使用Graphics2D类的rotate()方法,可以实现图形的旋转,该方法的定义如下:

public abstract void rotate(double theta, double x, double y)

参数说明

? theta:旋转的角度,以弧度为单位。

? x:旋转原点的x坐标。

w y:旋转原点的y坐标。

设计过程

(1)新建一个项目。

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

(3)在RotateShapeFrame窗体类中,创建内部面板类RotateShapePanel,并重写JComponent类的paint()方法,在该方法中使用Graphics2D类的rotate()方法旋转图形。

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

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

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

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

        Rectangle2D.Float rect = new Rectangle2D.Float(40, 40, 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.rotate(rotateValue); // 顺时针旋转

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

        } else if (flag == 2) {

            g2.rotate(rotateValue); // 逆时针旋转

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

        }

    }

}

U 注意:上面代码中的flag是一个标记变量,当该变量的值为0时,图形还原到原来的位置;为1时,对图形进行顺时针旋转;为2时,对图形进行逆时针旋转。rotateValue是与需要旋转角度对应的弧度值。

秘笈心法

心法领悟018:角度转换为弧度。

由于使用Graphics2D类的rotate()方法旋转图形时,是按弧度进行旋转的,因此,当给定的旋转值是角度时,需要将其转换为弧度。在Java中,可以使用Math类的toRadians(double angdeg)方法,将参数指定的角度angdeg转换为近似相等的弧度值。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章