Java HbackgroundImage重绘

Java HbackgroundImage重绘,java,image,netbeans,ide,Java,Image,Netbeans,Ide,我有一个显示背景图像的java代码。(pizza1.png)我想在按下箭头键(case HRcEvent.VK_RIGHT:)时更改它,但我不知道键入什么,这样它会重新绘制图像,它会更改imagepath的字符串,但不会重新绘制它。有人能帮我吗 public class HelloTVXlet implements Xlet, UserEventListener, ResourceClient, HBackgroundImageListener{ public String afbeel

我有一个显示背景图像的java代码。(pizza1.png)我想在按下箭头键(case HRcEvent.VK_RIGHT:)时更改它,但我不知道键入什么,这样它会重新绘制图像,它会更改imagepath的字符串,但不会重新绘制它。有人能帮我吗

public class HelloTVXlet implements Xlet, UserEventListener, ResourceClient, HBackgroundImageListener{

   public String afbeelding = "pizza1.png";

    private HScreen screen;
    private HBackgroundDevice bgDevice;
    private HBackgroundConfigTemplate bgTemplate;
    private HStillImageBackgroundConfiguration bgConfiguration;
    private HBackgroundImage agrondimg = new HBackgroundImage(afbeelding);

    public void notifyRelease(ResourceProxy proxy){}
    public void release(ResourceProxy proxy){}
    public boolean requestRelease(ResourceProxy proxy, Object requestData){
    return false;
    }

    public void imageLoaded (HBackgroundImageEvent e){
    try{
    bgConfiguration.displayImage(agrondimg);
    }
    catch (Exception s){
    System.out.println(s.toString());
    }
    }

    public void imageLoadFailed(HBackgroundImageEvent e){
    System.out.println("Image kan niet geladen worden");
    }




    private XletContext actueleXletContext;
    public static HScene scene;
    int waardex = 20;
    int waardey = 20;
    // x; y; 
//   public static MijnComponent mc = new MijnComponent("sterren.PNG");
    // debuggen of niet ?
    private boolean debug=true;

    public HelloTVXlet(){

    }


    public void initXlet(XletContext context) throws XletStateChangeException {

      screen = HScreen.getDefaultHScreen();
      bgDevice = screen.getDefaultHBackgroundDevice();
      if(bgDevice.reserveDevice(this)){

          System.out.println("BackgroundImage device ahs been reserved");
      }
      else{

          System.out.println("Background image device cannot be reserved");

      } 

      bgTemplate = new HBackgroundConfigTemplate();
      bgTemplate.setPreference(HBackgroundConfigTemplate.STILL_IMAGE, HBackgroundConfigTemplate.REQUIRED);

      bgConfiguration = (HStillImageBackgroundConfiguration)bgDevice.getBestConfiguration(bgTemplate);

      try{
      bgDevice.setBackgroundConfiguration(bgConfiguration);
      }catch(java.lang.Exception e){
      System.out.println(e.toString());
      }      




      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);




    }


    public void startXlet () throws XletStateChangeException {



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

    EventManager manager = EventManager.getInstance();
    UserEventRepository repository = new UserEventRepository("voorbeeld");

    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 {
     agrondimg.flush();
    }

    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_RIGHT:
                System.out.println("vk right");

                if(afbeelding == "pizza1.png"){
                afbeelding = "pizza2.png";

                System.out.println("1 naar 2");

                }else

                if(afbeelding == "pizza2.png"){
                afbeelding = "pizza3.png";

                System.out.println("2 naar 3");
                }else


                if(afbeelding == "pizza3.png"){
                afbeelding = "pizza4.png";

                System.out.println("3 naar 4");
                }else


                if(afbeelding == "pizza4.png"){
                afbeelding = "pizza1.png";

                System.out.println("4 naar 1");
                };


                break;

            case HRcEvent.VK_LEFT:
                System.out.println("vk left");

                break;


        }
        }

    }


}

我认为您必须创建一个新的HBackgroundImage对象,因为一旦文件被实例化,您就无法更改它。尝试:

agrondimg = new HBackgroundImage(afbeelding);
agrondimg.load(this);
try{
    bgConfiguration.displayImage(agrondimg);
} catch (Exception s){
    s.printStackTrace();
}

在userEventReceived()方法的末尾。

它给出了一个错误,因为bgConfiguration.displayImage(agrondimg);需要一个try catch,但在添加try catch后,它可以工作,非常感谢!好的,请看一下我的try catch,在添加日志之前,printStackTrace()可能对您有用?PS您使用的是什么软件包?它的文档似乎严重不足,我几乎找不到javadoc。