Положение компонента (Ваадин) - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть простой портлет с несколькими компонентами: 3 Button объекты, 1 Slider, 1 MenuBar и изображение, назначенное для Label (генерируется сервлетом). Теперь, когда я переключаюсь между изображениями для Label (у меня их больше), я хочу, чтобы изображение Label помещалось на старое изображение Label положение объекта:

Моя картинка Label находится в левом углу портлета. Объекты Button, MenuBar и Slider находятся под изображением Label, когда я выбираю другое изображение Label, новое изображение Label рисуется под другими компонентами (под объектами Button) , MenuBar, Slider), поэтому объекты Button находятся сверху, а картинка Label находится внизу портлета

например, я меняю фон картинки Label, выбирая цвет в меню:

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

        }
    }
});

ОБНОВЛЕНИЕ:

Я переключился с Label объектов на встроенные изображения (Embedded) (что намного лучше). Я попытался переназначить ресурс на объект Embedded новым цветом, но он не работает, вот что я сделал:

public void init() {

    URL PictureAUrl= null;
    try {
        pictureAUrl= new URL("http://localhost:8888/portlet/pictureA");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    URL PictureBUrl= null;
    try {
        pictureAUrl= new URL("http://localhost:8888/portlet/pictureB");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    URL pictureCUrl= null;
    try {
        pictureCUrl= new URL("http://localhost:8888/portlet/pictureC");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    final Embedded pictureA = new Embedded("", new ExternalResource(pictureAURL));
    pictureA .setType(Embedded.TYPE_IMAGE);
    final Embedded pictureB = new Embedded("", new ExternalResource(pictureBURL));
    pictureB .setType(Embedded.TYPE_IMAGE);
    final Embedded pictureC = new Embedded("", new ExternalResource(pictureCURL));
    pictureC .setType(Embedded.TYPE_IMAGE);


    newItem.addItem("ColorBlue", new Command(){
            public void menuSelected(MenuItem selectedItem) {
                if(!pictureA.equals(pictureB )){

        Resource newPictureResource = new ExternalResource("http://localhost:8888/portlet/pictureA?background=blue");
        newPictureResource.setType(Embedded.TYPE_IMAGE);
        pictureA.setResource(newPictureResource);

                }
                else {
                    window.showNotification("Please select pictureA");
                }
        }
   });

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

рихтомы верны, вы должны использовать метод replaceComponent.Я почти уверен, что основная проблема заключается в том, что после удаления изображения вы вызываете addComponent (pictureA), который фактически добавляет компонент в конец списка компонентов.Если у вас нет ссылки на старую картинку и это первый компонент, вы можете использовать это:

window.replaceComponent(window.getComponentIterator().next(), newPicture);

В дополнение к этому вам не нужно писать HTML для показа изображений.Вы можете использовать Embedded .

Если изображения находятся в вашем пути к классам, вы можете использовать следующее:

Embedded newPicture = new Embedded("", new ClassResource("my-picture.png", myApplication));
newPicture.setType(Embedded.TYPE_IMAGE);
window.replaceComponent(oldPicture, 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);

Это может решить вашу проблему.

0 голосов
/ 10 сентября 2011

Глядя на Javadoc API Vaadin,

Я нашел это

public void replaceComponent(Component oldComponent,Component newComponent)

Я не тестировал его ... но он должен работать.

...