实例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创建内部面板类_Java图形与文本(18)相关推荐

  1. java创建内部面板类_java-RGB调色面板的实现(事件监听器之匿名内部类)

    题目要求: **要求写一个案例,使用三个JSlider分别选取R.G.B三原色的值,用户可以通过活动JSlider的滑块来动态的合成一种颜色,合成的颜色显示在界面上.** 代码思路解析: 1.所需要的 ...

  2. java 创建学生信息类_java定义一个表示学生信息的类

    展开全部 public class Student { /* * (non-Javadoc) * * @32313133353236313431303231363533e4b893e5b19e3133 ...

  3. Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

    Java 创建用户异常类.将异常一直向上抛. throw和throws的区别 参考文章: (1)Java 创建用户异常类.将异常一直向上抛. throw和throws的区别 (2)https://ww ...

  4. java订单类_基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...

  5. java订单类_使用Java创建一个订单类代码实例

    这篇文章主要简介了使用Java创建一个订单类代码实例,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 需求描述 定义一个类,描述订单信息 订单id ...

  6. java如何创建一个dao类_java – 如何设计一个DAO类?

    应该是什么是设计DAO类的最佳方式? 方法#1:将DAO类设计为对象. class Customer { //customer class } class CustomerDAO { public v ...

  7. java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

    java枚举和枚举类 当Java 8即将面世时,您确定您对Java 5中引入的枚举很熟悉吗? Java枚举仍然被低估了,很可惜,因为它们比您想象的要有用,它们不仅仅用于通常的枚举常量! Java枚举是 ...

  8. java常见不可变类_Java语言不可变类的诀窍

    示例 不可变对象是状态无法更改的对象.不可变类是其实例根据设计和实现是不可变的类.作为不可变性示例最常见的Java类是java.lang.String. 以下是陈规定型的示例: public fina ...

  9. java 反射获取实体类_Java 通过反射给实体类赋值操作

    表单提交这个方法是挺方便的,但在java来说就显得有些麻烦了, 怎么个麻烦呢,就是当你字段多的时候,你就得一个一个的获取其对应的值,这样代码量就多了起来,其代码量不说,维护也是一个问题. 所以就有了这 ...

  10. java程序 构建mycircle类_Java语言程序设计(十九)对象和类的应用实例

    1.我们定义一个Circle类并使用该类创建对象,我们创建三个圆对象,1.0,25和125,然后显示这三个圆的半径和面积,将第二个对象的半径改为100,然后显示它的新半径和面积.程序清单如下: pac ...

最新文章

  1. The current directory must be set to the ITT directory解决办法
  2. [python skill]利用python计算T分布下的置信区间
  3. python字符串的冒泡排序_如何实现python冒泡排序算法?
  4. golang 结构体 slice 排序
  5. 【机器学习】传统目标检测算法之DPM
  6. mac hosts文件已锁定无法修改怎么办?hosts修改权限设置教程
  7. Ubuntu E: 无法获得锁 /var/lib/dpkg/lock - open
  8. CSS基础必备知识点01
  9. python正则表达式代码_python正则表达式的使用(实验代码)
  10. python模块调用模块_Python模块调用
  11. mysql事务隔离级别回顾
  12. AI算法 - 粒子滤波
  13. js如何获取计算机当前时间,js获取当前系统时间实例代码
  14. std::stack使用总结
  15. 什么是REST风格? 什么是RESTFUL?(一篇全读懂)
  16. 年龄怎么用计算机算,年龄计算器
  17. Android DES加密解密
  18. mysql逗号后update_隔mysql逗号
  19. 超宽屏幕比例_选择合适的21:9超宽带鱼屏屏幕(普通屏幕也可)
  20. 微信小程序 | 基于ChatGPT实现电影推荐小程序

热门文章

  1. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
  2. GDBT、AdaBoost、XGBoost提升算法解析
  3. Tensorflow训练mnist数据集源代码解析
  4. Unity 阴影的制作方式
  5. 【测试篇】为什么需要测试
  6. if...else 应用(猜幸运数字)
  7. UIView常见方法
  8. Access 至少一个参数没有被指定值 解决方法
  9. 转载 Microsoft .NET Pet Shop 4 架构与技术分析
  10. NSGA-II资料合集