作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我对 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
,事实上,我建议完全避免使用小程序,直到您更好地理解 APIsetSize
,小程序的大小由创建它的 html 标记定义。paint
方法中调用 repaint
或任何可能调用 repaint
的内容paint
,它太容易破坏绘制链(您拥有的),并且对于像Applet
这样的顶级容器,不是双缓冲的。事实上AWT一般不是双缓冲的,这会导致组件重绘时出现闪烁。相反,您应该使用诸如 JPanel
之类的东西并重写它的 paintComponent
方法KeyListener
,它有太多焦点问题。相反,请使用 Key Bindings API它为您提供了更多的控制权和更可重用的 API看一下:
了解更多详情
关于java - 重绘未验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21539211/
我是一名优秀的程序员,十分优秀!