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