如何用Java实现小图形

学完Java之后,好多同学都不知道,可以用Java做一些什么东西,是不是可以实现一些小图形呢?
MoonDemo.java

package cn.tedu.day0401;
import javax.swing.JFrame;
/*

  • JFrame ---- 窗体 ---- 相框

  • JPanel ---- 画布 ---- 相片

  • 导包

  • 1.手动导包 import…

  • 2.自动导包 ctrl + shift + o

  • 3.点击红色的×号
    */
    public class MoonDemo {
    public static void main(String[] args) {
    //1.创建一个窗体
    JFrame frame = new JFrame();
    //2.给窗体添加标题
    frame.setTitle(“Moon and Rocket”);
    //3.给窗体添加大小
    frame.setSize(1400, 820);
    //4.窗体居中显示
    frame.setLocationRelativeTo(null);
    //类名.静态常量
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //画布
    Rocket tj = new Rocket();
    //添加画布到面板上
    frame.add(tj);
    //添加鼠标的监听事件
    frame.addMouseListener(tj);
    tj.addMouseListener(tj);
    //添加键盘的监听事件
    frame.addKeyListener(tj);
    tj.addKeyListener(tj);
    //5.显示窗体
    frame.setVisible(true);
    }
    }
    Rocket.java

    package cn.tedu.day0401;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JPanel;

    public class Rocket extends JPanel implements KeyListener,MouseListener,Runnable{
    //初始位置
    int x = 300;
    int y = 200;
    //火箭头
    int k1 = 500, t1 = 300;
    //火箭身体
    int k2 = 500, t2 = 300;
    //火箭的火
    int k3 = 500, t3 = 300;
    int k4 = 500, t4 = 300;
    int k5 = 500, t5 = 300;
    int k6 = 500, t6 = 300;
    //王冠
    int k7 = 500, t7 = 200;
    //月亮
    int k9 = 300, t9 = 216;
    int ke = 300, te = 216;
    //星星
    int[] a = new int[300];
    int[] b = new int[300];

     int position = 0;
     
     public Rocket(){
     	Thread t = new Thread(this);
     	t.start();//启动线程
     	//构造方法:方法名与类同名;无任何返回值类型;无参构造
     	for(int i = 0 ; i <a.length ; i++){
     		//随机产生位置
     		a[i] = (int)(Math.random()*1400);
     		b[i] = (int)(Math.random()*800);
     	}
     }
     
     public void paint(Graphics g) {
     	super.paint(g);
     	//修改底部背景色
     	this.setBackground(Color.black);
     	// g 代表画笔
     	//加logo
     	//g.setColor(Color.red);
     	//g.fillOval(x+30, y, 10, 7);
     	//火箭头
     	g.setColor(Color.red);
     	g.fillOval(k1 + 20, t1 + 195, 50, 40);
     	//火箭身体
     	g.setColor(Color.lightGray);
     	g.fillRect(k2 - 52, t2 + 195, 100, 40);
     	//火箭尾巴
     	g.setColor(Color.yellow);
     	g.fillOval(k3 - 90, t3 + 195, 40, 6);
     	g.fillOval(k4 - 90, t4 + 206, 40, 6);
     	g.fillOval(k5 - 90, t5 + 217, 40, 6);
     	g.fillOval(k6 - 90, t6 + 228, 40, 6);
     	
     	//王冠
     	g.setColor(Color.yellow);
     	g.fillRect(k7+1, t7, 47, 15);// 矩形
     	g.fillOval(k7+1, t7-15, 15, 30); //左椭圆
     	g.fillOval(k7+15, t7-30, 18, 40);
     	g.fillOval(k7+32, t7-15, 15, 30);
     	g.setColor(Color.red);
     	g.fillOval(k7+20, t7, 10, 10);
     	g.fillOval(k7+5, t7-10, 4, 7);
     	g.fillOval(k7+22, t7-20, 4, 7);
     	g.fillOval(k7+38, t7-10, 4, 7);
     	
     	//月亮
     	//外框
     	g.setColor(Color.ORANGE);
     	g.fillOval(k9+90, t9, 260, 260);
     	//画圆
     	g.setColor(Color.yellow);
     	g.fillOval(k9+100, t9, 250, 250);
     	//加眼睛
     	g.setColor(Color.BLACK);
     	g.fillOval(ke + 290, te + 120, 25,20);
     	g.fillOval(ke +230, te + 120, 25, 20);
     	//嘴巴
     	g.fillOval(ke + 260, te + 145, 25,20);
     	g.setColor(Color.ORANGE);
     	
     	//火箭上面加文字
     	g.setColor(Color.black);
     	Font font = new Font(Font.DIALOG,Font.BOLD,15);
     	g.setFont(font);
     	g.drawString("火箭!", k1 - 25 , t1 + 220);
     	
     	//画波纹
     	g.setColor(Color.yellow);
     	for (int i = 0; i < a.length;i++) {
     		g.drawString("+", a[i], b[i]);
     	}
     }
     //使用方法!!!
     public void mousePressed(MouseEvent e) {
     	// TODO Auto-generated method stub
     	System.out.println("111111111");
     	x=e.getX();
     	y=e.getY();
     	k1 = e.getX();
     	t1 = e.getY();
     	k2 = e.getX();
     	t2 = e.getY();
     	k3 = e.getX();
     	t3 = e.getY();
     	k4 = e.getX();
     	t4 = e.getY();
     	k5 = e.getX();
     	t5 = e.getY();
     	k6 = e.getX();
     	t6 = e.getY();
     	//重绘,重复调用paint方法
     	repaint();
     }
     public void run(){
     	System.out.println("start");
     	while(true){
     		for(int i=0;i<a.length;i++){
     			a[i]--;
     			if(a[i]<0){
     				a[i] = 1400;
     			}
     		}
     		try {
     			Thread.sleep(10);
     		} catch (InterruptedException e) {
     			e.printStackTrace();
     		}
     		repaint();
     	}
     }
     @Override
     public void mouseClicked(MouseEvent e) {
     	// TODO Auto-generated method stub
    
     }
     @Override
     public void mouseReleased(MouseEvent e) {
     	// TODO Auto-generated method stub
    
     }
     @Override
     public void mouseEntered(MouseEvent e) {
     	// TODO Auto-generated method stub
    
     }
     @Override
     public void mouseExited(MouseEvent e) {
     	// TODO Auto-generated method stub
    
     }
     @Override
     public void keyTyped(KeyEvent e) {
     	// TODO Auto-generated method stub
    
     }
     @Override
     // ctrl + F
     // ctrl + O
     public void keyPressed(KeyEvent e) {
     	// TODO Auto-generated method stub
     	//		System.out.println("点击了按钮。");
     	if(e.getKeyCode() == KeyEvent.VK_RIGHT){
     		System.out.println("点击了右键");
     		x=x+10;
     		k1=k1+10;
     		k2=k2+10;
     		k3=k3+10;
     		k4=k4+10;
     		k5=k5+10;
     		k6=k6+10;
     		ke=ke+2;
     	}
     	if(e.getKeyCode() == KeyEvent.VK_LEFT){
     		System.out.println("点击了←键");
     		x=x-10;
     		k1=k1-10;
     		k2=k2-10;
     		k3=k3-10;
     		k4=k4-10;
     		k5=k5-10;
     		k6=k6-10;
     		ke=ke-2;
     	}
     }
     @Override
     //键盘松开产生反应
     public void keyReleased(KeyEvent e) {
     	// TODO Auto-generated method stub
     }
    

    }
    完成结果如下图:
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值