程序功能:

使用Graphics2D类draw方法绘制立方体

运行示例:

源码:

1. 实体类

import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.geom.GeneralPath;
import java.security.SecureRandom;import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;/*** 13.16 (Drawing Cubes) Write an application that draws a cube. Use class* GeneralPath and method draw of class Graphics2D.* * @author Pandenghuang@163.com* @Date Jan 22, 2019, 1:44:03 PM**/
public class CubeJPanel extends JPanel
{final SecureRandom rn = new SecureRandom();public void paint(Graphics g){Graphics2D g2d = (Graphics2D) g;    super.paintComponents(g);int width = getWidth(); // total width   int height = getHeight(); // total heightint rRed;int rGreen;int rBlue;int length = width/3; //边长随窗体尺寸增大而增大int aX = width/2 - length/2;int aY = height/2 - length/2;//定义一个正方体int cubeCordinates[][] =  new int[2][7]; //保存正方体的7个点(另一点作图时用不到)cubeCordinates[0][0] = aX;   //A点X坐标cubeCordinates[0][1] = aX + length;    //B点X坐标cubeCordinates[0][2] = aX + length;    //C点X坐标cubeCordinates[0][3] = aX;  //D点X坐标cubeCordinates[0][4] = (int) (aX + 1.5*length);    //E点X坐标cubeCordinates[0][5] = (int) (aX + 0.5*length);    //F点X坐标cubeCordinates[0][6] = (int) (aX + 1.5*length);    //G点X坐标cubeCordinates[1][0] = aY;  //A点Y坐标cubeCordinates[1][1] = aY;  //B点Y坐标cubeCordinates[1][2] = aY + length;    //C点Y坐标cubeCordinates[1][3] = aY + length;    //D点Y坐标cubeCordinates[1][4] = (int) (aY - 0.3 * length);   //E点X坐标cubeCordinates[1][5] = (int) (aY - 0.3 * length);   //F点X坐标cubeCordinates[1][6] = (int) (aY + 0.7 * length);  //G点X坐标int cubeSquareCordinates[][][] =  new int[3][2][4]; //保存正方体的7个点构成的三个面,用于绘制该正方体//正面由ABCD四个点构成for (int i=0; i<2; i++)for (int j=0; j<4; j++) {cubeSquareCordinates[0][i][i] = cubeCordinates[i][j];   //A点X坐标}cubeSquareCordinates[0][0][0] = cubeCordinates[0][0];  //A点X坐标cubeSquareCordinates[0][0][1] = cubeCordinates[0][1];   //B点X坐标cubeSquareCordinates[0][0][2] = cubeCordinates[0][2];   //C点X坐标cubeSquareCordinates[0][0][3] = cubeCordinates[0][3];   //D点X坐标cubeSquareCordinates[0][1][0] = cubeCordinates[1][0];   //A点Y坐标cubeSquareCordinates[0][1][1] = cubeCordinates[1][1];   //B点Y坐标cubeSquareCordinates[0][1][2] = cubeCordinates[1][2];   //C点Y坐标cubeSquareCordinates[0][1][3] = cubeCordinates[1][3];   //D点Y坐标//右侧面由BCGE四个点构成cubeSquareCordinates[1][0][0] = cubeCordinates[0][1];    //B点X坐标cubeSquareCordinates[1][0][1] = cubeCordinates[0][2];   //C点X坐标cubeSquareCordinates[1][0][2] = cubeCordinates[0][6];   //G点X坐标cubeSquareCordinates[1][0][3] = cubeCordinates[0][4];   //E点X坐标cubeSquareCordinates[1][1][0] = cubeCordinates[1][1];   //B点Y坐标cubeSquareCordinates[1][1][1] = cubeCordinates[1][2];   //C点Y坐标cubeSquareCordinates[1][1][2] = cubeCordinates[1][6];   //G点Y坐标cubeSquareCordinates[1][1][3] = cubeCordinates[1][4];   //E点Y坐标//上面由ABEF四个点构成cubeSquareCordinates[2][0][0] = cubeCordinates[0][0];     //A点X坐标cubeSquareCordinates[2][0][1] = cubeCordinates[0][1];   //B点X坐标cubeSquareCordinates[2][0][2] = cubeCordinates[0][4];   //E点X坐标cubeSquareCordinates[2][0][3] = cubeCordinates[0][5];   //F点X坐标cubeSquareCordinates[2][1][0] = cubeCordinates[1][0];   //A点Y坐标cubeSquareCordinates[2][1][1] = cubeCordinates[1][1];   //B点Y坐标cubeSquareCordinates[2][1][2] = cubeCordinates[1][4];   //E点Y坐标cubeSquareCordinates[2][1][3] = cubeCordinates[1][5];   //F点Y坐标//绘制该正方体for (int i = 2; i >= 0;i--){//Color represented in RGB moderRed = rn.nextInt(256);rGreen = rn.nextInt(256);rBlue = rn.nextInt(256);Color color=new Color(rRed, rGreen, rBlue);g2d.setColor(color);g2d.fill(new GeneralPath(new Polygon(cubeSquareCordinates[i][0],cubeSquareCordinates[i][1],4)));}    }} 

2. 测试类

import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.JTextArea;public class DrawCube {static JTextArea statusBar = new JTextArea();public static void main(String[] args){// create a panel that contains our drawingCubeJPanel panel = new CubeJPanel();MouseHandler handler = new MouseHandler(); panel.addMouseMotionListener(handler);// create a new frame to hold the panelJFrame application = new JFrame();application.setTitle("绘制正方体");// set the frame to exit when it is closedapplication.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);application.add(panel,BorderLayout.CENTER); // add the panel to the frameapplication.add(statusBar,BorderLayout.SOUTH); // add the statusBar to the frameapplication.setSize(460, 360); // set the size of the frameapplication.setVisible(true); // make the frame visible    } static class MouseHandler extends  MouseMotionAdapter {// handle event when mouse enters area@Overridepublic void mouseMoved(MouseEvent event){  statusBar.setText(String.format("光标当前坐标:[%d, %d]", event.getX(), event.getY()));;}}}

学以致用——Java源码——使用Graphics2D类draw方法绘制立方体(Drawing Cubes)相关推荐

  1. 学以致用——Java源码——使用Graphics类drawRect方法绘制表格(Grid Using Method drawRect)

    程序功能: 使用Graphics类drawRect方法绘制10*10表格. 运行结果: 源码: 1. 实体类 //Creating JFrame to display DrawPanel. impor ...

  2. 学以致用——Java源码——抛双骰游戏图形界面版(GUI-Based Craps Game)

    游戏简介: 1. 抛双骰游戏的Swing界面版(CLI命令行版本见:学以致用--Java源码--抛双骰儿游戏改进版(Craps Game Modification with wagering),htt ...

  3. 学以致用——Java源码——使用随机几何图形制作屏保程序(Screen Saver with Shapes Using the Java 2D API)

    程序功能: 使用随机输出的几何图形作为屏保程序,用户可随时指定屏幕上要显示的图形元素的数量. 运行示例: 源码: 1. 实体类 import java.awt.Graphics; import jav ...

  4. Java源码阅读(类图自动生成工具)

    菜鸟上路,在有了基础以后,总需要去阅读大量的优秀的源码,但在面对一个项目工程大量的代码不知道怎么下手.只是跟着敲代码,我觉得这个方法不太妥当. 我是个方法论者,在收集查阅了大量的资料后发现画代码结构图 ...

  5. 学以致用——Java源码——员工薪酬系统功能增强(Payroll System Modification)

    程序功能: 1. 基类:Emplyee(普通员工)(姓名.生日.身份证号) 2. 直接子类:SalariedEmployee(固定工资员工),HourlyEmployee(小时工).Commissio ...

  6. 学以致用——Java源码——键盘事件演示程序(Keystroke Events Demo Program)

    程序功能 捕捉用户在键盘上的按键,按键分为三种类型: 1. 操作键(Action Key)(箭头.Home.End.翻页键.功能键(F1-F12).INSERT键.PRINT SCREEN键.CAPS ...

  7. 学以致用——Java源码——使用多态输出平面及立体几何图形的面积和体积(Project: Shape Hierarchy)

    程序功能: 使用继承和多态的面向编程思想,动态的判断几何形状,打印平面图形面积及立体几何图形的面积和体积. 这个习题让我从无到有创建了共10个类才完成,虽然简单,但是作为继承和多态的入门练习还是不错的 ...

  8. 学以致用——Java源码——抛硬币(Coin Tossing)

    十年一晃而过,十年前写的代码,依然可以帮助我前进! package exercises.ch6Methods;import java.util.*;//JHTP Exercise 6.29 (Coin ...

  9. java源码详解——String类

    java源码详解--String类目录: Java String 类 下面开始介绍主要方法: Java charAt() 方法 Java compareTo() 方法 int compareTo(St ...

最新文章

  1. linux链接时区分动态库,Linux修改时区的方法
  2. map传参上下文赋值的问题
  3. 深入理解编译优化之循环展开和粗化锁
  4. Android-一张图理解MVP的用法
  5. JVM(3)——JVM类加载器
  6. TextView实现自动滚动滚动.
  7. 图像分类_01图像分类简介:挑战+近邻分类器+CIFAR-10数据集概述
  8. Microsoft Deployment Toolkit 2008部署操作系统系列(一)
  9. jquery之统计数字parseFloat
  10. WebService学习之三:spring+cxf整合
  11. 深度学习教程(12) | CNN应用:目标检测(吴恩达·完整版)
  12. 服务器上的文件误删怎么恢复,云服务器误删文件恢复
  13. 【LaTex】 Font “FandolSong-Regular“ does not contain requested(fontspec)Script “CJK“.如何抑制此种警告?
  14. vue-router升级3.0.0以上版本导致Uncaught(in promise) navigation guard报错问题
  15. 牛腩老师讲B/S开发小结 触发器 主键 外键
  16. Python gevent学习笔记-2
  17. E22-400M22S(SX1268) CubeMX HAL
  18. echarts tree默认展开_Echarts树形图展开和收缩
  19. 海康威视DS-2DC2402IW-D3/W 安装使用教程
  20. mysql加锁分析 何登成_何登成的技术博客 ? MySQL 加锁处理分析

热门文章

  1. 几行代码解决百度云视频变成 8秒净网公告问题(滑稽)
  2. cocos2d-x的初步学习二十八之爱消除一
  3. 【seo入门教程】零基础新手学seo必备
  4. vba获取html代码数据,VBA获取网页表格数据
  5. ArcGIS License Manager许可升级的方法及无法读取许可问题
  6. php红包退回通知,PHP红包算法
  7. python立方根求解_python – 如何获得立方根的整数?
  8. 会员测试环境治理之路
  9. 英语从句(英语兔学习笔记)
  10. 周总结2022.1.10-2022.1.16