java - 在计时器上绘制图像

标签 java image netbeans timer

我正在用 java 制作一个 xlet 应用程序,在一个场景中,当我输入正确的键时,我现在有一个鼠标图像。但现在我希望它在计时器上移动,我现在拥有的是一个计时器,它会在滴答声上打印我的图像的位置,并且它会正确地改变 zo x 和 y。但是没有绘制图像,有人可以帮助我吗?这是我拥有的 3 个文件:

这是 hellotvxlet 类(主要内容):

package hellotvxlet;

import javax.tv.xlet.*;
import org.havi.ui.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import org.bluray.ui.event.HRcEvent;
import org.dvb.event.EventManager;
import org.dvb.event.UserEventListener;
import org.dvb.event.UserEventRepository;
import org.dvb.ui.*;
import java.util.Timer;
//import org.dvb.ui.*;
//import java.awt.event.ActionEvent;
//import org.havi.ui.event.HActionListener;

public class HelloTVXlet implements Xlet, UserEventListener{
    private XletContext actueleXletContext;
    public HScene scene;
    int waardex = 20;
    int waardey = 20;
    // x; y; 
    MijnComponent mc = new MijnComponent("bitmap1.jpg",waardex,waardey);
    // debuggen of niet ?
    private boolean debug=true;

    public HelloTVXlet(){

    }


    public void initXlet(XletContext context) throws XletStateChangeException {
      if(debug) System.out.println("Xlet initialiseren");
      this.actueleXletContext = context;

      HSceneTemplate sceneTemplate = new HSceneTemplate();

      sceneTemplate.setPreference(HSceneTemplate.SCENE_SCREEN_DIMENSION, new HScreenDimension(1.0f, 1.0f), HSceneTemplate.REQUIRED);

      sceneTemplate.setPreference(HSceneTemplate.SCENE_SCREEN_LOCATION, new HScreenPoint(0.0f,0.0f), HSceneTemplate.REQUIRED);

      scene = HSceneFactory.getInstance().getBestScene(sceneTemplate);


      scene.add(mc);



    }


    public void startXlet () throws XletStateChangeException {

    MijnTimerTask objMijnTimerTask=new MijnTimerTask ( );
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(objMijnTimerTask ,0, 100); 
    //star t na 0ms, elke 100ms 



    if(debug) System.out.println("Xlet starten");

    EventManager manager = EventManager.getInstance();
    UserEventRepository repository = new UserEventRepository("voorbeeld");
    repository.addKey( org.havi.ui.event.HRcEvent.VK_UP);
    repository.addKey( org.havi.ui.event.HRcEvent.VK_DOWN);
    repository.addKey( org.havi.ui.event.HRcEvent.VK_RIGHT);
    repository.addKey( org.havi.ui.event.HRcEvent.VK_LEFT);

    manager.addUserEventListener(this, repository);


    scene.validate();
    scene.setVisible(true);
    }

    public void pauseXlet() {

    }

    public void destroyXlet(boolean unconditional)throws XletStateChangeException {

    }

    public void userEventReceived(org.dvb.event.UserEvent e){

        if(e.getType() == KeyEvent.KEY_PRESSED){
        System.out.println("pushed button");
        switch (e.getCode()){
            case HRcEvent.VK_UP:
                System.out.println("vk up");
                waardey --;
                mc.setLocation(waardex, waardey);
                break;
            case HRcEvent.VK_DOWN:
                System.out.println("vk down");
                waardey ++;
                mc.setLocation(waardex, waardey);
                break;

            case HRcEvent.VK_RIGHT:
                System.out.println("vk right");
                mc.setLocation(waardex, waardey);
                waardex ++;
                break;

            case HRcEvent.VK_LEFT:
                System.out.println("vk left");
                mc.setLocation(waardex, waardey);
                waardex --;
                break;


        }
        }

    }


}

这是MijnComponent:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package hellotvxlet;

import org.havi.ui.*;
import java.awt.*;
import org.dvb.ui.*;

/**
 *
 * @author student
 */
public class MijnComponent extends HComponent{

    private Image bmap;
    private MediaTracker mtrack;


    public MijnComponent(String bitmapnaam, int x, int y){

    bmap = this.getToolkit().getImage(bitmapnaam);
    mtrack = new MediaTracker(this);
    mtrack.addImage(bmap,0);
    try{

    mtrack.waitForAll();
    }
    catch(Exception e){
    System.out.println(e.toString());
    }
    this.setBounds(x,y,bmap.getWidth(null),bmap.getWidth(null));
}




    public void paint (Graphics g){
    java.awt.Image imgjpg = this.getToolkit().getImage("bitmap1.jpg");
      g.drawImage(bmap, 0,0,null); 
    }

   /* public void MoveLeft(){

    }
    public void MoveRight(){

    }
    public void MoveUp(){

    }
    public void MoveDown(){

    }
    */

}

这是定时器类:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package hellotvxlet;
import java.util.TimerTask;
/**
 *
 * @author student
 */




public class MijnTimerTask extends TimerTask {
    HelloTVXlet xlet = new HelloTVXlet();
     int waardex = 20;
     int waardey = 20;
    // x; y; 

public void run ( )
{
System.out.println(xlet.mc.getLocation());
xlet.waardex ++;
xlet.mc.setLocation(xlet.waardex, xlet.waardey);
//int appelsap = (int) xlet.mc.getAlignmentX();
}
}

最佳答案

我没有看到任何导致显示刷新的东西。我认为您需要从计时器运行方法中调用“repaint()”,以便刷新显示。

关于java - 在计时器上绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011809/

相关文章:

java - 如何在java中迭代这个json数组

用于私有(private)/ protected 方法的 JavaDoc?

javascript - jQuery按时间间隔替换图像

java - 如何在Java中修复它

java - 有没有办法让我确定哪个程序使用 Netbeans 运行最快?

java - NetBeans: "Failed to automatically set-up JavaFX Platform"

java - Netty 4.1 如何从服务器端重启 SSL session /握手(问候请求)

java - 将某些子字符串前缀添加到数组列表中

html - 背景图像未出现在网站上

css - 使用 CSS 叠加图像