有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java小程序不显示任何内容

一个简单的问题,也许有一个不那么简单的答案。我的代码应该在黑色背景上显示一个三角形,可以在屏幕上移动。没有显示任何内容,只有一个不能右键单击的白色区域。它在appletviewer或HTML文档中都不起作用,并且不显示语法错误。我的代码有什么问题

import java.awt.*;
import java.applet.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;


public class Shipmovementtest extends Applet implements Runnable,KeyListener{

    Graphics2D g2d;
    Ship ship1 = new Ship();
    BufferedImage backbuffer;
    AffineTransform identity = new AffineTransform();
    Shape ship1shape;
    Thread gameloop;
    public void start()
    {
        gameloop = new Thread(this);
        gameloop.start();
    }
    public void run()
    {
        Thread t = Thread.currentThread();
        while(gameloop==t)
        {
        try
        {
            Thread.sleep(20);
        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }
        repaint();
        }
    }
    public void stop()
    {
        gameloop = null;
    }

    public void init()
    {
        ship1shape = ship1.getShape();
        backbuffer = new BufferedImage(640,480,BufferedImage.TYPE_INT_RGB);
        g2d = backbuffer.createGraphics();
        addKeyListener(this);
        setFocusable(true);
        requestFocusInWindow();

    }
    public void update(Graphics g)
    {
        g2d.setTransform(identity);
        g2d.setPaint(Color.BLACK);
        g2d.fillRect(0,0,getSize().width,getSize().height);
        drawShip();
        paint(g);
    }
    public void keyTyped(KeyEvent e){}
    public void keyPressed(KeyEvent e)
    {
        int ke = e.getKeyCode();
        switch(ke)
        {
        case KeyEvent.VK_LEFT:
            ship1.setFaceAngle(ship1.getFaceAngle()-5);
            break;
        case KeyEvent.VK_RIGHT:
            ship1.setFaceAngle(ship1.getFaceAngle()+5);
            break;
        case KeyEvent.VK_UP:
            ship1.incX(-ship1.calcAngleMoveX(ship1.getFaceAngle())*ship1.velocity);
            ship1.incY(-ship1.calcAngleMoveY(ship1.getFaceAngle())*ship1.velocity);
            break;
        case KeyEvent.VK_DOWN:
            ship1.incX(ship1.calcAngleMoveX(ship1.getFaceAngle())*ship1.velocity);
            ship1.incY(ship1.calcAngleMoveY(ship1.getFaceAngle())*ship1.velocity);
            break;
       }
    }
    public void paint(Graphics g)
    {
        g2d.drawImage(backbuffer,0,0,this);
    }
    public void keyReleased(KeyEvent e){}
    public void drawShip()
    {
        g2d.setTransform(identity);
        g2d.translate(ship1.getX(),ship1.getY());
        g2d.rotate(Math.toRadians(ship1.getFaceAngle()));
        g2d.setColor(ship1.getColor());
        g2d.fill(ship1.getShape());
    }
}

共 (1) 个答案

  1. # 1 楼答案

    paint的末尾,您需要实际地将缓冲区绘制到实际图形g。当前仅在缓冲区中绘制

    所以正确的代码应该是

    public void paint(Graphics g)
    {
        g.drawImage(backbuffer,0,0,this);
    }