0

私はJavaとVaadinが初めてです。Mavenで簡単なプロジェクトを作成しました。その動作ですが、いくつかの行動はそのようなものではありません。主に重要なPNG画像は、1つのウィンドウでのみ表示されます。アプリは、代わりに多くのウィンドウに画像を表示するとします。

次のボタンと前のボタンを含む管理クラスがあります。これらは機能していますが、管理ウィンドウからクライアント ウィンドウ png を開くと消えます。

これはよくある問題ですか?画像オブジェクトを複数回使用できることを何らかの形で指定する必要がありますか?

ClientWindow.class

adminwindow.class -singleton、クライアントウィンドウのリストが含まれています。現在の画像の変更を思い出させます

displayer.class -singleton、

レイアウトで置き換える前に、画像をコピーしてみました。誰かが何が起こっているのか考えていますか?

これは表示クラスです:

パッケージ multiUser;

//import java.io.File;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.vaadin.server.FileResource;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.VaadinService;
import com.vaadin.ui.Image;

public class Displayer {

//deklaracja singletonu
private final static Displayer instance = new Displayer();

public static Displayer getInstance() {
    return instance;
}

private List<Image> images = new ArrayList();



String basepath = VaadinService.getCurrent()
                  .getBaseDirectory().getAbsolutePath();




Image currentImage;
int currentImageIndex=0;

private Displayer() {
    fillListImages();
    setFirstImageAsCurrent();
}



private void setFirstImageAsCurrent() {
    currentImage = images.get(currentImageIndex);
}

private void fillListImages() {
    for (int i = 1 ; i<4  ; i++){
        FileResource resource = new FileResource(new File(basepath +
            "/WEB-INF/images/" + i +".png"));
        images.add(new Image("",resource));

    }   
}

public void nextImage() {
    if(currentImageIsLast()) {
        currentImage = images.get(0);

    } else{ 
        currentImageIndex = images.indexOf(currentImage);
        currentImageIndex = currentImageIndex + 1;
        currentImage = images.get(currentImageIndex);

    }
}
public void previousImage() {
    if(currentImageIsFirst()) {
        currentImage = images.get(images.size() - 1);

    } else{ 
        currentImageIndex = images.indexOf(currentImage);
        currentImageIndex = currentImageIndex - 1;
        currentImage = images.get(currentImageIndex);

    }
}


private boolean currentImageIsFirst() {
    return currentImage == images.get(0);
}



private boolean currentImageIsLast() {
    return currentImage == images.get(images.size()-1);
}



public Image getCurrentImage() {
    return currentImage;
}

}

わかりました、私はこの問題を解決しました。私は画像リストを削除し、呼び出されるたびに画像のリソースを解決するように geyCurrentImage() メソッドを作成しました:

作業コード:

* パッケージ multiUser;

//import java.io.File;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.vaadin.server.FileResource;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.VaadinService;
import com.vaadin.ui.Image;

public class Displayer {

//deklaracja singletonu
private final static Displayer instance = new Displayer();

public static Displayer getInstance() {
    return instance;
}





String basepath = VaadinService.getCurrent()
                  .getBaseDirectory().getAbsolutePath();





int currentImageIndex=1;
int imagesAmount= 3;

private Displayer() {


}




private Image getImageResource(int index) {
    FileResource resource = new FileResource(new File(basepath + "/WEB-INF/images/" + index +".png"));
    Image image =  new Image("",resource);
    return image; 
}



public void nextImage() {
    if(currentImageIndex==imagesAmount) {
        currentImageIndex=1 ;       
    } 
    else{           
        currentImageIndex = currentImageIndex + 1;                  
    }
}
public void previousImage() {
    if(currentImageIndex==1) {
        currentImageIndex = imagesAmount;

    } else{             
        currentImageIndex = currentImageIndex - 1;          
    }
}




public Image getCurrentImage() {
    Image currentImage = getImageResource(currentImageIndex);
    return currentImage;
}

} *

4

1 に答える 1

0

同じ画像オブジェクトを別のコンポーネントに追加することはできません。コンポーネント (イメージ) は、親を 1 つだけ持つことができます。ただし、異なるイメージが同じリソースを持っている場合があります。

List<Image>使用する代わりにList<Resource>、親コンポーネントに画像を追加するときは、常に新しい画像オブジェクトを使用しgetCurrentResource()ます。

于 2013-10-31T15:16:11.867 に答える