实例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转换为近似相等的弧度值。

Java图形与文本(18)的更多相关文章

  1. java 图形界面

    1.创建一个窗口框架 /** * java 用户界面框架 * 2016/5/10 */ package org.windows; import javax.swing.*; public class ...

  2. Java图形界面学习---------简易登录界面

    /** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...

  3. Java 图形界面开发--图文并茂建立学生管理系统

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ...

  4. Java图形界面GUI

    Java图形界面GUI 设置窗体JFrame对象 package com.Aha.Best; import javax.swing.ImageIcon; import javax.swing.JFra ...

  5. Java图形用户界面编程

    1.Java图形用户界面编程概述 JavaAPI中提供了两套组件用于支持编写图形用户界面:AWT(抽象窗口包)和Swing 2.  容器(Container):重量级容器和轻量级容器(一个容器可以放置 ...

  6. Java查询大文本

    但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和游标计算函数,书写简单 ...

  7. JAVA 图形开发中组件对齐方法及界面开发

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...

  8. 【转】java图形界面设计(AWT)

    [转自]http://blog.sina.com.cn/s/blog_616e189f0100ne1t.html 1.       基本的java Frame操作. Java的图形界面的类主要包括AW ...

  9. JAVA各版本更新特性1-8

    JAVA各版本更新特性1-8 原文地址 Java Versions, Features and History This article gives you a highlight of import ...

随机推荐

  1. 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里

    这里以解析hibernate.cfg.xml数据库配置信息为例,运用dom4j的解析方式来解析xml文件. 1.在javaWeb工程里新建一个java类,命名为GetXmlValue.java,为xm ...

  2. C语言-define 与do{}while(0)

    问题引出: 我们都知道宏定义#define只是简单替换,所以遇到复杂的带参数宏,必须很小心的为需要的参数加上括号“()”:同样碰到复杂的多条语句替代,虽然加{}可以将其封装成一个整体,但同时又有另一个 ...

  3. php学习函数如何执行的

    入口栈abc(4)--------abc(4)------abc(3)-----abc(2)再返回上一层栈,执行完后返回上一层.输出$n=2-------$n=2-------$n=3

  4. [ DLPytorch ] 线性回归&Softmax与分类模型&多层感知机

    线性回归 基础知识 实现过程 学习笔记 批量读取 torch_data = Data.TensorDataset(features, labels) dataset = Data.DataLoader ...

  5. inode节点使用率过大处理

    当发现某个分区下的inode使用率过大时,需要找到该分区下的某些目录里有哪些文件可以清理. 查找某个目录下一个月或两个月之前的文件,然后删除# find . -type f -mtime +30 |w ...

  6. SpringBoot下配置Druid

    什么是Druid:Druid是阿里发开的一套基于database的监控平台,相对于其他监控来说对于中文的支持更亲民.. 前言:最近这段时间发现项目整体运行响应速度较慢,打算对系统进行深层次的优化(尤其 ...

  7. 工具 - PyCharm相关

    Ctrl + Q查看Documentation Ctrl + Alt + L 格式化代码 """""" + enter就可以自动生成DocS ...

  8. linux 环境下安装jdk

    参考:https://blog.csdn.net/qq_30788949/article/details/81975954 安装 参考: https://www.cnblogs.com/shihaim ...

  9. Python数据类型-2 数字类型

    数字类型 数字类型是不可变类型.所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象.数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象. 还是要强调一 ...

  10. 02-07Android学习进度报告七

    今天主要学习了关于Android开发的Date和Time组件部分内容. 首先看TextClock: 可以通过调用:TextClock提供的is24HourModeEnabled()方法来查看,系统是否 ...