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转换为近似相等的弧度值。
Java图形与文本(18)的更多相关文章
- java 图形界面
1.创建一个窗口框架 /** * java 用户界面框架 * 2016/5/10 */ package org.windows; import javax.swing.*; public class ...
- Java图形界面学习---------简易登录界面
/** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...
- Java 图形界面开发--图文并茂建立学生管理系统
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ...
- Java图形界面GUI
Java图形界面GUI 设置窗体JFrame对象 package com.Aha.Best; import javax.swing.ImageIcon; import javax.swing.JFra ...
- Java图形用户界面编程
1.Java图形用户界面编程概述 JavaAPI中提供了两套组件用于支持编写图形用户界面:AWT(抽象窗口包)和Swing 2. 容器(Container):重量级容器和轻量级容器(一个容器可以放置 ...
- Java查询大文本
但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和游标计算函数,书写简单 ...
- JAVA 图形开发中组件对齐方法及界面开发
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...
- 【转】java图形界面设计(AWT)
[转自]http://blog.sina.com.cn/s/blog_616e189f0100ne1t.html 1. 基本的java Frame操作. Java的图形界面的类主要包括AW ...
- JAVA各版本更新特性1-8
JAVA各版本更新特性1-8 原文地址 Java Versions, Features and History This article gives you a highlight of import ...
随机推荐
- CN109241772A发票区块链记录方法、装置、区块链网关服务器和介质(腾讯)
学习笔记-2 CN109241772A发票区块链记录方法.装置.区块链网关服务器和介质(腾讯) 解决什么问题? 让发票信息记录到区块链的情况下减少发票信息泄露 链上有什么数据? 发行发票事件信息(发票 ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 位运算
bitwise_and() 函数对数组中整数的二进制形式执行位与运算. import numpy as np print ('13 和 17 的二进制形式:') a,b = 13,17 print ( ...
- mysql_pw 指令 数据库创建过程
------------------pw_db数据库创建过程各表创建指令-------------------------- create database pw_db; #创建一个数据库use pw ...
- Codeforces Round #611 (Div. 3) D
There are nn Christmas trees on an infinite number line. The ii -th tree grows at the position xixi ...
- Ubuntu配置Python开发环境(PyCharm、Tensorflow)
安装JDK: https://www.cnblogs.com/wanghuixi/p/9837229.html 安装Anaconda: 安装PyCharm: https://www.cnblogs.c ...
- table 实现向下滑动首行冻结,向右滑动左列冻结
<html> <head> <meta charset="utf-8"> <title>测试</title> <M ...
- 设计模式课程 设计模式精讲 6-2 抽象工厂coding
1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...
- Practical aspects of deep learning
If your Neural Network model seems to have high variance, what of the following would be promising t ...
- Unable to instantiate Action, xxxAction, defined for 'xxx' in namespace '/'xxxAction解决方案
出现这个问题的原因主要有两个 1.如果项目没有使用Spring,则struts.xml配置文件中,这个action的class属性的路径没有写完整,应该是包名.类名 2.如果项目使用了Spring,那 ...
- 区分 for...in 和 for...of
我们都知道在 JavaScript 中 for...in 和 for...of 都可以迭代一个数组,但他们之间也有着很大的区别: 区别一:用于迭代器的返回值不同 for...in 和 for...of ...