`
long_yu2
  • 浏览: 334570 次
社区版块
存档分类
最新评论

swing绘制了一只直升机

    博客分类:
  • java
阅读更多

周末用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);    
        
    }
}
 

效果:

14
3
分享到:
评论
30 楼 long_yu2 2012-04-15  
junjun185576005 写道
color=red]楼主太强大了![ [/color]

谢谢支持
29 楼 long_yu2 2012-04-15  
jelly_x 写道
牛,我用笔都很难画出来这样的

28 楼 long_yu2 2012-04-15  
xieye 写道
有点文艺青年范

呵呵 谢谢支持
27 楼 long_yu2 2012-04-15  
贾懂凯 写道
楼主是否先P图?然后量坐标?

呵呵,看着图来做
26 楼 long_yu2 2012-04-15  
漫步邃思 写道
不错,很有创意啊

谢谢支持
25 楼 long_yu2 2012-04-15  
mixer_b 写道
很好玩...

24 楼 贾懂凯 2012-04-15  
楼主是否先P图?然后量坐标?
23 楼 xieye 2012-04-15  
有点文艺青年范
22 楼 jelly_x 2012-04-14  
牛,我用笔都很难画出来这样的
21 楼 junjun185576005 2012-04-14  
color=red]楼主太强大了![ [/color]
20 楼 漫步邃思 2012-04-14  
不错,很有创意啊
19 楼 long_yu2 2012-04-14  
huihuilou 写道
SWT像一位建筑师,SWING更像是一位艺术家。但是都跟不上时尚。

18 楼 huihuilou 2012-04-13  
SWT像一位建筑师,SWING更像是一位艺术家。但是都跟不上时尚。
17 楼 long_yu2 2012-04-13  
i2534 写道
建议不要重写paint,重写paintComponent就可以了


有道理,我试下
16 楼 long_yu2 2012-04-13  
_Chaos_ 写道
Swing现在用的人实在太少了,不过其设计模式还是很经典的,值得学习

谢谢支持
15 楼 long_yu2 2012-04-13  
mixer_b 写道
很好玩...

14 楼 i2534 2012-04-13  
建议不要重写paint,重写paintComponent就可以了
13 楼 _Chaos_ 2012-04-13  
Swing现在用的人实在太少了,不过其设计模式还是很经典的,值得学习
12 楼 mixer_b 2012-04-13  
很好玩...
11 楼 long_yu2 2012-04-13  
lbfhappy 写道
楼主加上一下抗锯齿,效果应该会好很多的。


我试一下,谢谢

相关推荐

    java swing绘制正弦曲线

    Java Swing 是Java GUI(图形用户界面)库的一部分,它提供了丰富的组件和工具,用于构建桌面应用程序。在这个场景中,我们讨论的是如何使用Java Swing来绘制正弦曲线,这对于理解和掌握图形绘制以及数学与编程的...

    基于JAVA模拟操作系统作业调度算法(源码+项目说明)(界面用Swing绘制).zip

    基于JAVA模拟操作系统作业调度算法(源码+项目说明)(界面用Swing绘制).zip基于JAVA模拟操作系统作业调度算法(源码+项目说明)(界面用Swing绘制).zip基于JAVA模拟操作系统作业调度算法(源码+项目说明)(界面...

    Java绘图:绘制虚线与实线javalearnsa资料分享

    创建一个简单的Java Swing程序,演示如何绘制虚线和实线: ```java import javax.swing.*; import java.awt.*; public class DrawLines extends JFrame { public DrawLines() { setSize(400, 400); ...

    JAVA实现的抛物线绘制

    在Java编程语言中,实现抛物线的绘制是一项常见的图形处理任务,这主要涉及到二维图形的绘制和数学原理的应用。本项目中,开发者利用Java的图形库,如Java AWT或Swing,来创建用户界面并实现抛物线的动态显示。下面...

    java使用swing绘制国际象棋棋盘

    使用 Swing 可以创建各种图形化的应用程序,本文将介绍如何使用 Java 和 Swing 绘制一个国际象棋棋盘。 什么是国际象棋棋盘 国际象棋棋盘是一个 8x8 的格子棋盘,棋盘上的每个格子都可以放置棋子。棋盘的颜色通常...

    JavaSwing 绘制折现图用到的jar包免费下载,需要自取

    包含 旧版本 gnujaxp.jar jcommon-1.0.13.jar jfreechart-1.0.10-experimental.jar jfreechart-1.0.10-swt.jar swtgraphics2d.jar junit.jar 新版本 jcommon-1.0.23.jar jfreechart-1.0.19.jar ...

    swing表格分页控件封装

    java swing表格分页控件封装,有利于在开发中节约时间

    WaffleCopter:使用Swing用J​​ava编程的直升机游戏

    **华夫直升机(WaffleCopter)**是一款使用Java编程语言,并结合Swing图形用户界面库开发的直升机游戏。Swing是Java的一个标准库,用于构建桌面应用,它提供了丰富的组件和功能来创建交互式用户界面。 ### 游戏机制与...

    Java基于socket编写的局域网实时通讯软件源代码+数据库,基于swing绘制用户可视化界面

    项目基于socket实现局域网实时通讯,使用swing绘制用户可视化界面,使用mysql实现用户数据的存储,通过thread多线程实现信息的实时收发,通过io流实现图片的存储。 项目分为客户端、服务端两个入口,客户端可同时...

    java绘图软件(用java的Swing编写的一个简单的绘图软件,可以用来绘制简单的图形,还可以保存,复制,粘贴等很多功能。)详细功能大家自己下载体验

    Java绘图软件是一款基于Java Swing库开发的简单图形编辑器,它允许用户创建并操作基本图形,同时还提供了保存、复制和粘贴等实用功能。在本文中,我们将深入探讨Java Swing以及这款软件背后的关键技术。 Java Swing...

    一个基于java Swing开发的ATM机例子

    在这个"一个基于Java Swing开发的ATM机例子"中,我们可以深入理解如何使用Swing构建一个简单的模拟ATM机应用。 首先,Swing 提供了丰富的组件库,如 JButton、JLabel、JTextField、JOptionPane 等,这些组件可以...

    swing教程 swing教程

    因此,Swing 出现了,Swing 组件几乎都是轻量级组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。 Swing 的特点 Swing 是由 ...

    startUML、java、swing

    startUML、java、swing startUML、java、swing startUML、java、swing

    Swing速度慢和反映迟钝原因

    Swing作为Java图形用户界面(GUI)开发的重要框架之一,在实际应用中可能会出现速度慢和响应迟钝的问题。这类问题主要源于程序员对Swing事件处理机制的理解不足。 - **事件处理机制不当**:Swing使用事件分发线程...

    Java swing画随机圆

    在“Java Swing画随机圆”这个题目中,学生被要求利用Java Swing库来创建一个程序,该程序能够在屏幕上动态地绘制出大小、颜色和位置都随机的圆形。这涉及到Java编程基础、Swing组件的使用以及随机数生成的知识点。 ...

    使用Swing绘制动态时钟

    本篇文章将深入讲解如何使用Swing来绘制一个动态时钟。 首先,静态时钟的实现相对简单,可以通过计算角度并使用Java 2D API在画布上绘制指针和数字。但为了使时钟看起来动态更新,我们需要引入线程的概念。这是因为...

    java swing漂亮界面 超酷 javaswing教程

    Java Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,用于帮助开发者创建桌面应用程序。Swing提供了一系列组件,如按钮、文本框、菜单等,允许开发者构建功能...

    swing中使用jfreenchart绘制柱状图,折线图,折线图中可动态添加线

    在Java的Swing环境中,JFreeChart库是一个强大的工具,用于创建各种图表,包括柱状图、折线图等。本教程将详细讲解如何利用JFreeChart在Swing应用程序中实现这些功能,以及如何在折线图中动态添加线。 首先,确保你...

    java swing是一把刀

    Java Swing 是Java平台上用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC) 的一部分。在本文中,我们将深入探讨Java Swing,并基于标题"Java Swing是一把刀"来理解它如何在程序员手中成为...

    java swing飞机大战小游戏

    在本项目"java swing飞机大战小游戏"中,开发者使用了Swing来创建一个简单的飞机大战游戏,这对于初学者来说是一个很好的实践项目,因为它涉及到了面向对象编程、事件处理和图形绘制等基本概念。 1. **Swing组件**...

Global site tag (gtag.js) - Google Analytics