周末用swing绘制了一只直升机 对swing的的绘制技术有些总结:

1.图形基于坐标系定位 坐标原点位于左上角 分别向右(x轴) 向下(y轴)递增
2.图形按像素组成
3.重写Jcomponent的paint方法 其中的Graphics g 对象相当于画笔
4.对于特别复杂的图形无法绘制 可以用g.drawImage载入 但比较消耗资源
5.擅用g.drawArc、d.drawPloygon、d.drawPloyline 这三个函数可以画出比较复杂的图形

感觉swing对图型图像的处理相对较弱,在开发比较痛苦

package com.gs.swing;

import java.awt.Color;import java.awt.Graphics;

import javax.swing.JFrame;import javax.swing.JPanel;

public class Helicoper extends JFrame{public Helicoper(){    this.setSize(400,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);    }public static void main(String[] args) {        Helicoper frame = new Helicoper();        Panel panel = new Panel();        frame.add(panel);    }}

class Panel extends JPanel {

public void paint(Graphics g) {super.paint(g);//着色

//后浆        g.setColor(Color.CYAN);        g.fillOval((15-12),(31-12),12*2,12*2);//前桨        g.fillPolygon(new int[]{62,63,65,69,77,93,108}, new int[]{11,10,9,8,7,6,6}, 7);        g.fillPolygon(new int[]{62,77,93,101,105,107,108}, new int[]{11,10,9,8,7,6,6}, 7);

        g.fillPolygon(new int[]{112,113,115,119,127,143,158}, new int[]{6,5,4,3,2,1,1}, 7);        g.fillPolygon(new int[]{112,127,143,151,155,157,158}, new int[]{6,5,4,3,2,1,1}, 7);

//飞机躯干        g.setColor(Color.GREEN);        g.fillPolygon(new int[] { 158, 147, 139, 124, 120, 92, 76, 50,46,37,41, 14, 15, 75, 89, 142},new int[] { 43,  34,  27,  23,  19,  19, 26, 28,25,25,28, 29, 33, 39, 51, 51},                 16);        g.fillArc(89+20, 52-(52-43)*2, (158-89)-20, (52-43)*2, 0, -70);

//机身        g.setColor(Color.GRAY);        g.fillPolygon(new int[]{87,123,124,74}, new int[]{22,22,24,26}, 4);        g.fillArc(131-10, 38-(44-38), 10, (44-38)*2, 0, -90);        g.fillPolygon(new int[]{74,81,131-10/2,131,124}, new int[]{26,44,44,38,24}, 5);        g.fillPolygon(new int[]{54,45,37,46}, new int[]{31,31,25,25}, 4);

//尾翼        g.fillPolygon(new int[]{24,17,14,13},  new int[]{28,21,21,28}, 4);        g.fillArc(13,19,4,4,160,-180);

//前桨        g.setColor(Color.RED);        g.fillPolygon(new int[]{112,112,108,108}, new int[]{19,10,10,19}, 4);        g.fillOval(108, (10-4), 4, 4);

//飞机窗口        g.setColor(Color.BLACK);        g.fillPolygon(new int[]{147,133,128,139}, new int[]{34,34,25,27}, 4);        g.fillPolygon(new int[]{87,123,120,92}, new int[]{22,22,19,19}, 4);        g.fillPolygon(new int[]{129,120,116,124}, new int[]{35,35,26,24}, 4);        g.fillPolygon(new int[]{113,117,108,102}, new int[]{26,35,35,26}, 4);

//飞机躯干

        g.drawPolyline(new int[] { 158, 147, 139, 124, 120, 92, 76, 50,46,37,41, 14, 15, 75,89 ,142}, new int[] { 43, 34, 27, 23, 19, 19, 26, 28,25,25,28, 29, 33, 39, 51,51},                16);        g.drawArc(89+20, 52-(52-43)*2, (158-89)-20, (52-43)*2, 0, -70);

//飞机头部        g.drawPolyline(new int[]{147,133,128}, new int[]{34,34,25}, 3);//飞机机身        g.drawPolyline(new int[]{87,123}, new int[]{22,22}, 2);

        g.drawPolyline(new int[]{74,124,131}, new int[]{26,24,38}, 3);        g.drawArc(131-10, 38-(44-38), 10, (44-38)*2, 0, -90);

        g.drawPolyline(new int[]{74,81,131-10/2}, new int[]{26,44,44}, 3);            g.drawPolyline(new int[]{129,120,116}, new int[]{35,35,26}, 3);        g.drawPolyline(new int[]{113,117,108,102}, new int[]{26,35,35,26}, 4);

        g.drawPolygon(new int[]{54,45,37,46}, new int[]{31,31,25,25}, 4);

        g.drawLine(99, 26, 106, 44);        g.drawLine(99, 32, 101, 32);        g.drawLine(102, 39, 104, 39);

//飞机前桨                g.drawPolyline(new int[]{112,112,108,108}, new int[]{19,10,10,19}, 4);            g.drawOval(108, (10-4), 4, 4);

        g.drawArc(108-(108-62)*2, 6-5, (108-62)*2, 5*2, 0, -90);        g.drawArc(108-(108-62), 6, (108-62)*2, 5*2, 180, -90);

        g.drawArc(112-(108-62), 6-5*2, (108-62)*2, 5*2, 0, -90);        g.drawArc(112, 6-5, (108-62)*2, 5*2, 180, -90);

//飞机后浆 计算正切圆的切点坐标及外接正方形的起点坐标

        g.drawPolyline(new int[]{24,17}, new int[]{28,21}, 2);        g.drawPolyline(new int[]{13,14}, new int[]{21,28},2);        g.drawArc(13,19,4,4,160,-180);

        g.drawOval((15-12),(31-12),12*2,12*2);

        g.drawArc((15-8),(31-8),8*2,8*2,20,120);        g.drawArc((15-8),(31-8),8*2,8*2,-20,-50);        g.drawArc((15-8),(31-8),8*2,8*2,-90,-100);//飞机底座        g.drawArc(108,51,16,16,0,90);        g.drawArc(130,51,16,16,20,90);        g.drawArc(55,(51-8+6),100,(16-6),-20,-70);    

    }}

效果:

转载于:https://www.cnblogs.com/hottea4Goodspeed/archive/2012/04/07/2435591.html

swing绘制的直升机相关推荐

  1. java国际象棋棋牌_java使用swing绘制国际象棋棋盘

    本文实例为大家分享了java使用swing绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 1.完整代码 import java.awt.Color; import java.awt.Point; ...

  2. 国际象棋绘制java_java使用swing绘制国际象棋棋盘

    本文实例为大家分享了java使用swing绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 1.完整代码 import java.awt.color; import java.awt.point; ...

  3. java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...

    FreightSystem 基于java Swing编写的运费计算系统 初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始发站.目的站.省份.100kg以下(元/kg).100 ...

  4. 基于Java Swing编写的简易运费计算工具

    两年前给媳妇儿做的一个基于Java Swing编写的简易运费计算工具,现开源,关键是思路(https://github.com/honghailiang/FreightSystem).主要有两个部分实 ...

  5. 基于Java Swing编写的运费计算系统

    基于Java Swing编写的运费计算系统,主要有两个部分实现:1)初始化数据  2)用swing绘制系统并执行业务逻辑 一.初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始 ...

  6. 仿金山打字通游戏,模拟键盘(java swing),提示输入,导入本地txt文件

    一.设计思路 1.用一个主窗体,在主窗体上放置两个子窗体,一个是文本面板,一个是模拟键盘面板. 2.文本面板分两个子面板,一个是已有文本,一个是输入文本,在带输入文本面板上添加文件监听器,动态改变下一 ...

  7. Java中使用JNA实现全局监听Linux键盘事件

    title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...

  8. 基于 SpringMvc + OpenCV 实现的答题卡识别系统(附源码)

    点击关注公众号,实用技术文章及时了解 java_opencv 项目介绍 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它提供了一系列图像处理和计算机视觉方面很多通用算法.是研究图像 ...

  9. java 上调下移_java – 在调整框架大小时,JLabel的位置会更...

    我正在做我的个人项目,使用Swing绘制基本地图. 我有很多问题,但最糟糕的是我每次都会改变JLables的位置 >调整框架大小 >将它们设置为不可见并再次可见(setvisible(fa ...

最新文章

  1. 运维侠客行杭州站沙龙回顾 | 云时代下的运维管理实践(附干货下载)
  2. VBS编程基础教程 (第2篇)
  3. java post 打开新页面_JAVA后台POST/GET访问方法
  4. 用python做一些excel的事情,实现数据自动化
  5. win10下 Ubuntu 18.04 LTS 的安装及 rlt8821ce网卡驱动的安装
  6. Leetcode--1160.拼写单词(Java)
  7. 一图看懂云栖大会「云原生」发布
  8. Systrace的用法小结
  9. 第九章——计数器/定时器和多功能接口芯片
  10. (转)MyBatis框架的学习(一)——MyBatis介绍
  11. Spring中@Autowired注解的工作原理
  12. Linux 文件同步工具——rsync
  13. 英语不好学计算机特长,指导:英语学不好,是因为你没养成这些好习惯
  14. 《英语语法新思维初级教程》学习笔记(七)五种基本句型
  15. 4G手机网络免费开通高清语音VoLTE
  16. 全球破解组织网址大全
  17. zabbix 官网提供的监控 postgresql 的模板
  18. 单链表———带头结点跟不带头结点的区别
  19. jquery点击添加样式
  20. 第十九天:初识Linux+系统与设置命令+目录管理

热门文章

  1. 光刻机的工作原理及关键技术
  2. Ureport2——交叉表的合并问题
  3. javaserver安装
  4. 常见的HTML5开发工具都有哪些
  5. 大白话聊框架设计(入门篇) | 第二章:规则匹配Mapping实现
  6. python中用于绘制各种图形_如何在Python绘制图形
  7. xposed修改手机信息
  8. 画恐龙--通过OpenGL
  9. 【SpringBoot】SpringBoot——整合持久层技术
  10. Hadoop之Hadoop命令