java - 为什么我的重绘不起作用?

标签 java applet awt java-2d repaint

我有代码:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class obj_Dingus 
extends Applet
implements KeyListener{

    private Rectangle rect; //The rectangle that we move 

    public void init()
    {
        this.addKeyListener(this);
        rect = new Rectangle(0, 0, 50, 50);
    }

    public void paint(Graphics g)
    {
        setSize(500,500);
        Graphics2D g2 = (Graphics2D)g;
        g2.fill(rect);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        repaint();
        if (e.getKeyCode() == KeyEvent.VK_RIGHT){
            rect.setLocation(rect.x + 2, rect.y);
        }  if (e.getKeyCode() == KeyEvent.VK_LEFT){
            rect.setLocation(rect.x - 2, rect.y);
        }  if (e.getKeyCode() == KeyEvent.VK_UP){
            rect.setLocation(rect.x, rect.y - 2);
        }  if (e.getKeyCode() == KeyEvent.VK_DOWN){
            rect.setLocation(rect.x, rect.y + 2);
        }
        repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }
}

据我所知,它应该制作一个在屏幕周围移动的黑框,但屏幕没有更新,旧框也没有被清除。它最终在屏幕上出现一条巨大的黑线,我不知道我做错了什么,我是个初学者。

最佳答案

public void paint(Graphics g)
{
    setSize(500,500);
    Graphics2D g2 = (Graphics2D)g;
    g2.fill(rect);
}

切勿在 paint(Graphics) 方法中调用任何可能导致 GUI repaint() 的方法。添加组件、更改组件的内容或 设置 GUI 的大小 都会触发 repaint(),因此此小程序进入无限循环。

它应该更符合:

public void paint(Graphics g)
{
    super.paint(g); // always call the parent method 1st..
    Graphics2D g2 = (Graphics2D)g;
    g2.fill(rect);
}

关于java - 为什么我的重绘不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17622058/

相关文章:

Java/JVMTI : Usage of JavaVM-parameter in Agent_OnLoad(JavaVM, 字符*,无效)

java - 如何将小程序与 jar 中的包一起使用

jakarta-ee - Java EE 应用程序中的小程序访问蓝牙外设客户端

java - java.awt.Color.blue 和 java.awt.Color.BLUE 的目的是什么

java - java分配内存的方式如何选择?

java - 如何从自定义 SecurityManager 的 checkExit() 方法中确定调用 System.exit() 的类?

Java 使用给定字符串调用方法的最佳方式

java - 如何使用图形应用程序在 java 中逐像素绘制圆?

java - 使用 AWT 设置 java 元素的大小

java - 在学习 Swing 之前必须先学习 AWT 吗?