Java 部件位置(瓦丁)
我有一个包含几个组件的简单portlet:3个Java 部件位置(瓦丁),java,image,liferay,portlet,vaadin,Java,Image,Liferay,Portlet,Vaadin,我有一个包含几个组件的简单portlet:3个按钮对象,1个滑块,1个菜单栏,以及分配给标签(由servlet生成)的图片。现在,当我在标签的图片之间切换时(我有更多的图片),我希望图片标签放置在旧图片标签对象的位置: 我的图片标签位于portlet的左角。当我选择另一张图片标签时,按钮对象、菜单栏和滑块在图片标签下,新图片标签正在其他组件下绘制(在按钮对象下,菜单栏,滑块)因此,按钮对象。。。位于顶部,图片标签位于portlet的底部 例如,我通过在菜单中选择颜色来更改图片标签的背景: new
按钮
对象,1个滑块
,1个菜单栏
,以及分配给标签
(由servlet生成)的图片。现在,当我在标签的图片之间切换时(我有更多的图片),我希望图片标签
放置在旧图片标签
对象的位置:
我的图片标签
位于portlet的左角。当我选择另一张图片标签时,按钮
对象、菜单栏
和滑块
在图片标签
下,新图片标签
正在其他组件下绘制(在按钮
对象下,菜单栏
,滑块
)因此,按钮
对象。。。位于顶部,图片标签位于portlet的底部
例如,我通过在菜单中选择颜色来更改图片标签的背景:
newItem1.addItem("Blue",new Command(){
public void menuSelected(MenuItem selectedItem){
if(pictureA.isVisible()){
pictureB.setVisible(false);
pictureC.setVisible(false);
window.removeComponent(pictureA);
pictureA= new Label("<img src=http://localhost:8888/portlet/KiviatDiagramm?background=blue", Label.CONTENT_XHTML);
window.addComponent(pictureA);
} else {
window.showNotification("", Notification.TYPE_WARNING_MESSAGE);
}
}
});
查看Vaadin API javadoc
我找到了这个
public void replaceComponent(Component oldComponent,Component newComponent)
我还没有测试过。。。但是它应该可以工作。如果正确,您应该使用replaceComponent方法。我敢肯定,这里的主要问题是,在删除图片后,调用addComponent(pictureA),实际上是将组件添加到组件列表的末尾。如果您没有对旧图片的引用,并且它是第一个组件,那么您可以使用:
window.replaceComponent(window.getComponentIterator().next(), newPicture);
URL url = new URL("http://localhost:8888/portlet/KiviatDiagramm?background=blue");
Embedded newPicture = new Embedded("", new ExternalResource(url));
newPicture.setType(Embedded.TYPE_IMAGE);
window.replaceComponent(oldPicture, newPicture);
除此之外,您不必编写HTML来显示图像。你可以用
如果图像位于类路径中,则可以使用以下选项:
Embedded newPicture = new Embedded("", new ClassResource("my-picture.png", myApplication));
newPicture.setType(Embedded.TYPE_IMAGE);
window.replaceComponent(oldPicture, newPicture);
如果在其他地方发现,请使用以下方法:
window.replaceComponent(window.getComponentIterator().next(), newPicture);
URL url = new URL("http://localhost:8888/portlet/KiviatDiagramm?background=blue");
Embedded newPicture = new Embedded("", new ExternalResource(url));
newPicture.setType(Embedded.TYPE_IMAGE);
window.replaceComponent(oldPicture, newPicture);
这可能会解决您的问题。您不能删除图片a,而是将现有图片的
的src
重新分配到新图片的URL吗?@miq和Paul Grime我已经更新了问题,请查看它,也许您看到我做了什么直接在浏览器中加载图像URL时会发生什么?你看到你期望的图像/颜色了吗?我甚至不能编译它:未解决的编译问题:方法setResource(Resource)对于Embedded类型是未定义的。那么,你可能会在问题中遇到这样的问题,你不能编译代码。看问题的人不是读心术的人!IDE没有告诉您没有setResource方法吗?你读过Javadoc吗一个小问题:现在,当我多次选择同一颜色时,图片会被多次放置,而旧图片不会被删除。我想你可以用if(!newComponent.equals(oldComponent)){//replace code here}来包围replace组件调用,这样你就不会用它自己替换组件了