zoukankan      html  css  js  c++  java
  • Java图形与文本(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转换为近似相等的弧度值。

  • 相关阅读:
    微信小程序创建第一个项目
    微信小程序工具下载与安装
    Windows下删除顽固文件夹
    微信小程序账号注册
    C++第四十九篇 -- 将一个项目Copy到另一台电脑
    C++第四十八篇 -- 字符串分离方法
    C++第四十七篇 -- VS2017带参数启动调试程序
    MarkDown插入图片
    Http升级到Https (本地测试,无须域名和认证)
    语音识别(ASR) 阿里云
  • 原文地址:https://www.cnblogs.com/u0mo5/p/4145711.html
Copyright © 2011-2022 走看看