重绘不验证?

时间:2014-02-03 22:30:58

标签: java applet repaint

大家好我对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){

            }
     }

}

2 个答案:

答案 0 :(得分:3)

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

1-您正在使用KeyListener

KeyListener因出现问题而臭名昭着,因为当他们注册的组件是可聚焦的并且具有焦点时,他们只响应击键。

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

  • 你应该避免使用Applet,因为它已经过时并且通常不再被许多人使用了。而是使用JApplet,事实上,我建议完全避免使用applet,直到您更好地理解API
  • 不要在applet上调用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();