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

时间: 2024-11-06 07:09:27

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

JAVA 图形界面swing 创建按钮、文本域

package org.rui.swin; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import org.rui.utils.SwingConsole; public class Button1 extends JFrame{ private JButton button1=new JButton("button1"), button2=new JButton(

Java Swing界面编程(18)---单行文本输入组件:JTextField

以下的程序与上一例有一点区别,仔细对比不难发现其中的不同之处. package com.beyole.util; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test17 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal"); JT

Java图形界面编程

一:基本概念 AWT(Abstract Window Toolkit) 抽象窗口工具包,SUN 公司提供的用于图形界面编程(GUI)的类库.但是AWT得实现严重依赖于下层操作系统,所以导致组件AWT的外观取决于程序运行的平台.AWT的类和接口都定义在java.awt包中. Swing    Swing组件是实在AWT基础上开发的新型GUI组件,它是纯Java实现的轻量级(light-weight)组件,它不依赖任何特定平台,Swing组件在不同平台具有一致性的表现,但是Swing应用程序的界面外

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

图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作. 这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统.虽然说不入大神法眼,但这确实是费了自己不少心血.对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调.在此分享出来希望对和我一样的菜鸟有帮助. 程序完整代码下载地址见: https://github.com/chaohuangtianjie994/The-Sys

java图形用户界面认知

为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理 组件在容器中的布局,而不使用直接设置组件位置.组件类是创建用户界面的,例如,JButton,JLabel和JTextField.容器类是用来包含其他组件的,例如,JFrame,JPanel和JApplet.辅助类是用来支持GUI组件的,例如,Graphics,Color,Font,FontMetrics和Dimension. 一.组件类 Component 类的实例可以显示在屏幕上.Componen

多线程编程、Java I/O系统和Java图形界面编程

多线程编程: 一个正在运行的程序通常称为一个进程,每一个任务称为一个线程,中能够在一个程序内运行多线程的程序称为多线程程序. 线程与进程的区别:①每个进程都需要操作系统为其分配独立的内存空间: ②而同一个进程中的所有线程都在同一内存空间工作,这些线程可以共享同一块内存和系统资源. 线程的创建: 1)通过继承Thread类来创建线程: ①创建一个继承Thread类的类: ②在创建的Thread子类中重写run()方法,在方法中写入想要线程运行的代码: ③创建Thread子类的实例: ④通过调用该实

我的第一个Java图形程序

从书上看到了例子,自己又做了一点扩展,做个样子玩玩. 内容上稍微调整了一下,总结一点点小小的用法,写了点注释,仅供参考. package SwingExample; import java.awt.Color; import java.awt.Container; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import

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

/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 [email protected]*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往容器中添加组件往往并不能得到想要的结果.比如想上下对齐两个组件,而流式布局是从左到右的,此时就很难实现上下对齐,此篇文章将介绍两个方法. 1.直接使用坐标贴图 如下面这个计算器的制作 1 package Graphic; 2 3 import java.awt.BorderLayout; 4 imp

java图形用户界面程序

GUI(Graphical User Interface) 定义:一个程序中,用户可以可以看见和与之交流的部分. 支持图形用户界面的两套组件: 1,AWT 2,Swing 建立步骤: 建立容器-建立组件-将组件添加到容器-设置布局 Swing中的重量级容器: 继承自AWT中的Container类,为其他容器和组件提供绘制位置 有JFrame,JDialog,JWindow,JApplet; Swing中的轻量级容器: 继承自Swing类的JComponent,为了方便其他组件的定位 有JPane