在 Java 中正确初始化图形(或者我不确定的其他东西)

Properly Initializing Graphics (or maybe some other thing, I am not sure) in Java

我带着一个关于与上次相同的代码的新问题回来了。我接受了很多给出的建议,并改变了一些东西。该程序编译,但没有矩形出现任何输入。上一个线程中的人说代码可以解决问题,但这似乎不起作用。我不知道这是图形问题(我认为其他人建议按照我现在的代码执行的操作)还是我接受按键输入的方式有问题。

无论如何,下面的程序应该绘制一个矩形,并且根据您是按键盘上的 <- 还是 -> 键,将该矩形向右或向左移动一个坐标。但是,没有任何输入出现矩形。

import java.awt.*;
import java.net.*;
import java.util.*;
import java.applet.Applet;


public class game extends Applet
{
    Thread loopThread;
    boolean left  = false;
    boolean right = false;
    int platPos = 50;


    public void run() 
    { 
        Graphics g = null;

        int i, j;
        long startTime;

        if (loopThread == null) 
        {
            loopThread = new Thread();
            loopThread.start();
        }

        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        startTime = System.currentTimeMillis();
        while(Thread.currentThread() == loopThread) 
        {
            updatePlatter(g);
        }

    }


     public void updatePlatter(Graphics g) 
    {

         if(left)
         {
             g.setColor(new Color(255,255,255)); //sets color to white
             g.fillRect(50+platPos, 200, 100, 20); //draws over whatever existing rectangle there is with white
             platPos--; 
             g.setColor(new Color(100,100,100)); //sets new color
             g.fillRect(50+platPos,200, 100,20); //draws new rectangle 
             left = false; 
         }

         if(right)
         {
             g.setColor(new Color(255,255,255));
             g.fillRect(50+platPos,200,100,20);
             platPos++;
             g.setColor(new Color(100,100,100));
             g.fillRect(50+platPos,200,100,20);
             right = false;
         }

    }

    public boolean keyDown(Event e, int key) 
    {
            if (key == Event.LEFT)
            left = true;

            if (key == Event.RIGHT)
            right = true;

            return true;
     }
}

另外我想使用applet,而不是JFrame。只是个人喜好。谢谢你的帮助! ^.^

首先将图形提供给您的小程序。它是一个抽象 class,当您使用小程序 Java 时,它会为您提供正确的实现。你不能只是实例化它。有一些方法负责绘制/重新绘制小程序。所以我建议使用 paint 方法对矩形进行初始绘制,然后在循环中调用 repaint 。顺便说一下,将线程用于这样的循环不是可读代码(而且它不起作用)。您甚至不需要 运行() 方法 ;) 当您创建小程序时它就开始工作了。

所以我们可以这样做:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Event;
import java.awt.Graphics;


public class Game extends Applet
{
    boolean left  = false;
    boolean right = false;
    int platPos = 0;


    @Override
     public void paint(Graphics g) 
    {
         g.fillRect(50+platPos, 0, 100, 20); 
         System.out.println("repaint");
         if(left)
         {

             g.setColor(new Color(255,255,255)); //sets color to white
             g.fillRect(50+platPos, 0, 100, 20); //draws over whatever existing rectangle there is with white
             platPos--; 
             g.setColor(new Color(100,100,100)); //sets new color
             g.fillRect(50+platPos,0, 100,20); //draws new rectangle 
             left = false; 
         }

         if(right)
         {
             g.setColor(new Color(255,255,255));
             g.fillRect(50+platPos,200,100,20);
             platPos++;
             g.setColor(new Color(100,100,100));
             g.fillRect(50+platPos,200,100,20);
             right = false;
         }

    }
    @Override
    public boolean keyDown(Event e, int key) 
    {
             if (key == Event.LEFT) {
                left = true;
             }

            if (key == Event.RIGHT) {
                right = true;
            }

            repaint();
            return true;
     }
}