Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部件位置(瓦丁)_Java_Image_Liferay_Portlet_Vaadin - Fatal编程技术网

Java 部件位置(瓦丁)

Java 部件位置(瓦丁),java,image,liferay,portlet,vaadin,Java,Image,Liferay,Portlet,Vaadin,我有一个包含几个组件的简单portlet:3个按钮对象,1个滑块,1个菜单栏,以及分配给标签(由servlet生成)的图片。现在,当我在标签的图片之间切换时(我有更多的图片),我希望图片标签放置在旧图片标签对象的位置: 我的图片标签位于portlet的左角。当我选择另一张图片标签时,按钮对象、菜单栏和滑块在图片标签下,新图片标签正在其他组件下绘制(在按钮对象下,菜单栏,滑块)因此,按钮对象。。。位于顶部,图片标签位于portlet的底部 例如,我通过在菜单中选择颜色来更改图片标签的背景: new

我有一个包含几个组件的简单portlet:3个
按钮
对象,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组件调用,这样你就不会用它自己替换组件了