大家好我对java中的applet很新,并且想知道为什么当我按下向上键时我的椭圆没有向上移动屏幕。我说在paint方法中重绘并没有发生任何事情
任何想法? (请不要粗鲁我是applets的新手......)
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){
}
}
}
答案 0 :(得分:3)
你的主要问题归结为两个主要问题......
1-您正在使用KeyListener
KeyListener
因出现问题而臭名昭着,因为当他们注册的组件是可聚焦的并且具有焦点时,他们只响应击键。
2-您永远不会在repaint
方法中调用keyPressed
来请求重新绘制小程序。
Applet
,因为它已经过时并且通常不再被许多人使用了。而是使用JApplet
,事实上,我建议完全避免使用applet,直到您更好地理解API setSize
,applet的大小由创建它的html标记定义。repaint
方法中致电repaint
或任何可能致电paint
的内容paint
,它很容易打破画颜链(你有)和顶级容器如Applet
,不是双缓冲。事实上,AWT通常不是双缓冲的,这会在重新绘制组件时引起闪烁。相反,您应该使用类似JPanel
的内容并覆盖它的paintComponent
方法KeyListener
,它有太多焦点问题。相反,请使用Key Bindings API,它为您提供更多控制权和更可重用的API 看看:
了解更多详情
答案 1 :(得分:0)
这取决于你的jdk的版本。
在jdk1.6中我会用这个
invalidate();
validate();
repaint();
在jdk 1.7中我会使用
revalidate();
repaint();