如何设置多个 ImageView 的样式以不违反 JavaFX11 中的 DRY
How to style multiple ImageViews to not violate DRY in JavaFX11
有没有办法设置多个 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) 的新手。
我可以建议将视图分组到一个 class 中,其中包含所有需要的方法。通过这种方式,您以后可以轻松添加新功能、实例化新组并操作其中的视图。
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: 代码未测试。
您可以在列表中保留对 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);
}
有没有办法设置多个 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) 的新手。
我可以建议将视图分组到一个 class 中,其中包含所有需要的方法。通过这种方式,您以后可以轻松添加新功能、实例化新组并操作其中的视图。
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: 代码未测试。
您可以在列表中保留对 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);
}