代码如下:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

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

/**
* @author BruceLong
* 绘制王八,并设置键盘监听事件
* */
public class TurtleMove {

public static void main(String[] args) {
//1. 创建一个窗体,大小1366*768
JFrame frame = new JFrame();
frame.setSize(1366, 768);

/*//画一个板子
JPanel panel = new JPanel();
//设置面板的背景颜色
panel.setBackground(Color.BLACK);
//设置窗体添加面板
frame.add(panel);*/
/**创建一个面板,并设置面板的背景颜色
* 并添加到窗体上去*/
XiaoWangBa xwb = new XiaoWangBa();
xwb.setBackground(Color.LIGHT_GRAY);
//窗体添加键盘监听事件,监听对象是面板
frame.addKeyListener(xwb);
frame.add(xwb);

//3.设置窗体标题为:“画王八-个人签名”
frame.setTitle("画王八-WangYunlong");
//4.设置窗体关闭按钮功能
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//5.设置窗体大小不可更改
frame.setResizable(false);
//2.设置窗体可见
frame.setVisible(true);

}

}

//面板类
class XiaoWangBa extends JPanel implements KeyListener{
//王八的坐标位置
int x = 400,y = 200;
//王八四条腿(foot)的坐标
int fx1 = 400,fy1 = 200;
int fx2 = 400,fy2 = 200;
int fx3 = 400,fy3 = 200;
int fx4 = 400,fy4 = 200;

//移动变量
int f = 0;

//绘制方法,先输入paint再alt+/
@Override //JFrame frame
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
//1.第一步先设置画笔的颜色
//2.第二步再对画布进行画图设置坐标
/**画脑袋*/
//设置画笔颜色
//g.setColor(Color.yellow);
// Red Green Blue
g.setColor(new Color(0, 100, 0));

//绘制实心椭圆
g.fillOval(x, y, 70, 100);

/**画眼睛*/
//设置画笔颜色
g.setColor(Color.black);
g.fillOval(x+10, y+30, 10, 10);
g.fillOval(x+50, y+30, 10, 10);
/* //眼睛发亮
g.setColor(Color.white);
g.fillOval(x+15, y+30, 4, 4);
g.fillOval(x+55, y+30, 4, 4);*/

/**画尾巴*/
g.setColor(new Color(0, 100, 0));
g.fillOval(x, y+290, 60, 80);
//设置画笔颜色和背景颜色相同
g.setColor(Color.LIGHT_GRAY);
g.fillOval(x+20, y+300, 60, 80);

/**画王八四条腿*/
//左上
g.setColor(new Color(0, 100, 0));
g.fillOval(fx1-85, fy1+80, 70, 70);

//右上
g.setColor(new Color(0, 100, 0));
g.fillOval(fx2+85, fy2+80, 70, 70);
//左下
g.setColor(new Color(0, 100, 0));
g.fillOval(fx3-85, fy3+235, 70, 70);

//右下
g.setColor(new Color(0, 100, 0));
g.fillOval(fx4+85, fy4+235, 70, 70);
/**绘制王八壳*/
g.setColor(new Color(0, 50, 0));
g.fillOval(x-66, y+70, 200, 240);
/**绘制龟纹*/
g.setColor(Color.black);
g.drawOval(x-66, y+70, 200, 240);
//(上)左中右
g.setColor(Color.yellow);
g.fillOval(x-40, y+130, 50, 30);

g.setColor(Color.BLUE);
g.fillOval(x+15, y+80, 30, 50);

g.setColor(Color.yellow);
g.fillOval(x+60, y+130, 50, 30);
//中间
g.setColor(new Color(255, 0, 0));
g.fillOval(x+10, y+155, 45, 45);
//(下)左中右
g.setColor(Color.BLUE);
g.fillOval(x-45, y+195, 50, 30);

g.setColor(Color.yellow);
g.fillOval(x+20, y+220, 30, 50);

g.setColor(Color.BLUE);
g.fillOval(x+70, y+195, 50, 30);

//画直线(上)
g.setColor(Color.BLACK);
g.drawLine(x-10, y+82, x+20, y+158);

g.setColor(Color.BLACK);
g.drawLine(x+80, y+82, x+43, y+158);

//画直线(中间)
g.setColor(Color.BLACK);
g.drawLine(x-65, y+180, x+10, y+180);

g.setColor(Color.BLACK);
g.drawLine(x+133, y+180, x+55, y+180);

//画直线(下)
g.setColor(Color.BLACK);
g.drawLine(x-10, y+298, x+20, y+198);

g.setColor(Color.BLACK);
g.drawLine(x+80, y+298, x+43, y+198);
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
// 按键盘事件
//测试上键
if(e.getKeyCode()==KeyEvent.VK_UP && fy1>0) {
if(fy1<fy2) {
f = 1;
}else {
f = 0;
}

y=y-10;
if(f==0) {
fy1-=20;
fy4-=20;
}if(f==1) {
fy2-=20;
fy3-=20;
}
System.out.println("测试上键");
}

//如果按的是下键
if(e.getKeyCode()==KeyEvent.VK_DOWN) {
System.out.println("123");
if(fy1<fy2) {
f = 1;
}else {
f = 0;
}
y+=10;
if(f == 1) {
fy1+=20;
fy4+=20;
}
if(f == 0) {
fy2+=20;
fy3+=20;
}
}
//如果按的是左键
if(e.getKeyCode()==KeyEvent.VK_LEFT &&fx1>99) {
if(fx1>fx2) {
f = 1;
}else {
f = 0;
}
x-=10;
if(f == 1) {
fx1-=20;
fx4-=20;
}
if(f == 0) {
fx2-=20;
fx3-=20;
}
}
//如果按的是右键
if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
if(fx1<fx2) {
f = 1;
}else {
f = 0;
}
x+=10;
if(f == 1) {
fx1+=20;
fx4+=20;
}
if(f == 0) {
fx2+=20;
fx3+=20;
}
}
/*if(e.getKeyCode()==KeyEvent.VK_DOWN&& fy1>0) {
y=y+10;
if(fy1<=fy2) {
fy1+=20;
fy4+=20;
}else {
fy2+=20;
fy3+=20;
}
System.out.println("测试下键");
}
if(e.getKeyCode()==KeyEvent.VK_LEFT && fx1>0 ) {
x-=10;
if(fx1>=fx2) {
fx1-=20;
fx4-=20;
}else {
fx2-=20;
fx3-=20;
}
System.out.println("测试左键");
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT && fx1>0) {
x+=10;
if(fx1<=fx2) {
fx1+=20;
fx4+=20;
}else {
fx2-=20;
fx3-=20;
}
System.out.println("测试右键");
}*/
//重新绘制paint方法(重新调用paint方法)
repaint();
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

}

运行结果为:

java用swing画可以行走的乌龟的更多相关文章

  1. java 三次样条插值 画光滑曲线 例子

    java 三次样条插值 画光滑曲线 例子 主要是做数值拟合,根据sin函数采点,取得数据后在java中插值并在swing中画出曲线,下面为截图  不光滑和光滑曲线前后对比:    代码: 执行类: p ...

  2. 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

    I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...

  3. 你用java的swing可以做出这么炫的mp3播放器吗?

    这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...

  4. java实现 swing模仿金山打字 案例源码

    java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http://java.662p.com 代码: <font size="3">im ...

  5. (转)Java 的swing.GroupLayout布局管理器的使用方法和实例

    摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html (转)Java 的swing.GroupLayout布局管理器 ...

  6. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  7. 用JAVA中BufferedImage画出漂亮的验证码点击变化

    如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...

  8. Java继承Frame画一个窗口显示图片

    将图片显示到窗口上. 在工程目录下准备好图片5.png 运行代码: import javax.imageio.ImageIO; import java.awt.*; import java.awt.e ...

  9. Java版简易画图板的实现

    Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文 ...

随机推荐

  1. android PopupWindow 显示问题

    设置可点击,其余控件也可点击,等操作 setOutsideTouchable(true);   setBackgroundDrawable(new BitmapDrawable()); setTouc ...

  2. 20165231 2017-2018-2 《Java程序设计》第7周学习总结

    教材学习内容总结 第十一章 MySQL数据库管理系统,简称MySQL,是世界上最流行的开源数据库管理系统,其社区版(MySQL Community Edition)是最流行的免费下载的开源数据库管理系 ...

  3. 嵌入式系统C编程之堆栈回溯【转】

    转自:https://www.cnblogs.com/clover-toeic/p/3949896.html 前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况.一般可按需添加打印信息,以便 ...

  4. 鼠标事件event和坐标

    鼠标事件(e=e||window.event) event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标 ...

  5. Git学习笔记03-工作区和暂存区

    Git和其他版本控制工具不同的地方就是有暂存区的概念 工作区(Working Directory) 就是在电脑界面上能够看到的目录 版本库(Repository) 工作区下面有个一个.git文件夹,也 ...

  6. CFileFind

    1.CFileFind类的声明文件保存在afx.h头文件中.2.该类的实现的功能:执行本地文件的查找(查找某个具体的文件,查找某类文件x*.x*,查找所有文件*.*)3.CFileFind类是CGop ...

  7. 链接器link.exe 编译器cl.exe 资源编译器rc.exe

    原文地址:https://blog.csdn.net/biggbang/article/details/24433065 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译 ...

  8. HDU 3333 Turing Tree 离线 线段树/树状数组 区间求和单点修改

    题意: 给一个数列,一些询问,问你$[l,r]$之间不同的数字之和 题解: 11年多校的题,现在属于"人尽皆知傻逼题" 核心思想在于: 对于一个询问$[x,R]$ 无论$x$是什么 ...

  9. 【笔记】[WIN7x64] ThinkPad E420开机不能按设置关闭触控板的问题

    将win7x32重装为Win7x64后,TouchPad(以下简称TP)就不能在开机时按照在控制面板-鼠标中的设置关闭TP, 从而每次开机都必须去点开控制面板->鼠标 才能关闭TP.因为通常不用 ...

  10. js 正则提取img标签的src值

    var r = '<img[^<>]*? src="([^<>]*?)"'; var yyy=content.match(r); alert(yyy[ ...