gpt4 book ai didi

java - 重绘未验证?

转载 作者:行者123 更新时间:2023-12-01 23:13:46 26 4
gpt4 key购买 nike

大家好,我对 Java 中的小程序很陌生,想知道为什么当我按向上键时我的椭圆形没有在屏幕上移动。我在paint方法中说了repaint,但什么也没发生

有什么想法吗? (请不要无礼,我是小程序新手,所以...)

package mypackage;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.applet.*;


public class gameapplet extends Applet {

int charecterx = 500;
int charectery = 250;


public void init(){
addKeyListener(new AL());
setSize(1000,1000);
setBackground(Color.RED);
}

public void paint(Graphics g){
//Paint Method
g.setColor(Color.BLACK);
g.fillOval(charecterx,charectery,100,100);
repaint();
}

public class AL extends KeyAdapter
{

public void keyPressed (KeyEvent e)
{
int keyCode = e.getKeyCode();
//If Statements To see if user is moving
if(keyCode == e.VK_UP)
{

if(charecterx <= 0)
{
charecterx = 0;
}
else
{
charecterx--;
}
}
}

public void keyRealesed(KeyEvent e){

}
}

}

最佳答案

您的主要问题归结为两个主要问题......

1-您正在使用KeyListener

KeyListener 因存在问题而臭名昭著,因为它们仅在注册的组件可聚焦且具有焦点时才响应击键。

2- 您永远不会在 keyPressed 方法中调用 repaint 来请求重新绘制小程序。

  • 您应该避免使用Applet,因为它已经过时了,并且通常不再被很多人使用。相反,请使用 JApplet,事实上,我建议完全避免使用小程序,直到您更好地理解 API
  • 不要在小程序上调用 setSize,小程序的大小由创建它的 html 标记定义。
  • 请勿在任何 paint 方法中调用 repaint 或任何可能调用 repaint 的内容
  • 不要重写paint,它太容易破坏绘制链(您拥有的),并且对于像Applet这样的顶级容器,不是双缓冲的。事实上AWT一般不是双缓冲的,这会导致组件重绘时出现闪烁。相反,您应该使用诸如 JPanel 之类的东西并重写它的 paintComponent 方法
  • 不要使用KeyListener,它有太多焦点问题。相反,请使用 Key Bindings API它为您提供了更多的控制权和更可重用的 API

看一下:

了解更多详情

关于java - 重绘未验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21539211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com