我是 java 和 Vaadin 的新手。我用 maven 做了一个简单的项目。它可以工作,但有些行为并不像它应该的那样。最重要的 png 图像仅在一个窗口中显示。应用程序应该在许多窗口中显示图像。
有一个包含下一个和上一个按钮的 Admin 类,它们正在工作,但是在从管理窗口打开客户端窗口 png 后消失。
这是一个常见问题吗?我是否必须以某种方式指定 Image 对象可以多次使用?
ClientWindow.class
AdminWindow.class - 单例,包含客户端 Windows 列表,提醒他们当前图像更改
Displayer.class - 单例,
在替换布局之前,我什至尝试复制图像。有谁知道发生了什么?
这是显示类:
包多用户;
//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;
}
}
好的,我解决了这个问题。我删除了 imges 列表并使用 geyCurrentImage() 方法在每次调用图像时解析图像资源:
工作代码:
* 打包多用户;
//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;
}
} *