如何设置多个ImageView的样式以不违反JavaFX11中的DRY

时间:2019-02-13 19:27:19

标签: java javafx javafx-11

是否可以为多个ImageView及其类似样式设置样式?例如,我有以下代码:

Image pic1 = new Image(getClass().getResourceAsStream("/pic1.png"));
ImageView picView1 = new ImageView(pic1);
picView1.setFitHeight(PIC_SIZE);
picView1.setPreserveRatio(true);
picView1.setSmooth(true);

Image pic2 = new Image(getClass().getResourceAsStream("/pic2.png"));
ImageView picView2 = new ImageView(pic2);

...

我想更改所有图像的大小,超过10张图像。我可以创建一个组并将所有视图添加到该组中,并以该目标为目标来操纵所有对象吗? JavaFX的新手(11)。

2 个答案:

答案 0 :(得分:1)

我建议将视图与所有需要的方法组合在一个类中。这样,您以后就可以轻松添加新功能,实例化新组并操纵其中的视图。

public class ImageViewGroup {

private Map<String, ImageView> imagaViews;

public ImageViewGroup() {
imagaViews = new HashMap<>();
}

public void addNewImageView(String someIdentifierForRetrieval, String imagePath, double size) {
Image image = new Image(getClass().getResourceAsStream(imagePath));
ImageView imageView = new ImageView(image);
imageView.setFitHeight(size);
imageView.setPreserveRatio(true);
imageView.setSmooth(true);

imagaViews.put(someIdentifierForRetrieval, imageView);
}

public void resizeAllImageViews(double newSize) {
for (ImageView imageView : imagaViews.values()) 
    imageView.setFitHeight(newSize);
    }

}

PS:代码未经测试。

答案 1 :(得分:1)

您可以在列表中保留对ImageView的引用。

List<ImageView> imageViews = new ArrayList<>();
...
Image pic1 = new Image(getClass().getResourceAsStream("/pic1.png"));
ImageView picView1 = new ImageView(pic1);
picView1.setFitHeight(PIC_SIZE);
picView1.setPreserveRatio(true);
picView1.setSmooth(true);
imageViews.add(picView1);

Image pic2 = new Image(getClass().getResourceAsStream("/pic2.png"));
ImageView picView2 = new ImageView(pic2);
imageViews.add(picView2);

...

当您需要更改图像大小时,可以遍历列表并将fitHeight属性设置为所需的值。

for (ImageView imageView : imageViews) {
    imageView.setFitHeight(PIC_SIZE);
}