gpt4 book ai didi

Java/JavaFX : Set Swing Icon for JavaFX label

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:08 24 4
gpt4 key购买 nike

我正在尝试从文件 (.ico/.exe) 中读取缩略图(图标;32x32 像素)并将其设置为 JavaFX 标签。

我的第一次尝试:

public Icon getLargeIcon(String exeFile) {
if (exeFile != null) {
File file = new File(exeFile);
try {
ShellFolder sf = ShellFolder.getShellFolder(file);
return new ImageIcon(sf.getIcon(true), sf.getFolderType());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}

之后我这样做:

    Icon largeIcon = getLargeIcon(file.getAbsolutePath());
ImageIcon swingImageIcon = (ImageIcon) largeIcon;
java.awt.Image awtImage = swingImageIcon.getImage();
Image fxImage = javafx.scene.image.Image.impl_fromPlatformImage(awtImage);
lblAppIconValue.setGraphic(new ImageView(fxImage));

我搜索了几个网站并找到了这个,但它给了我一个异常(exception):java.lang.UnsupportedOperationException:loadPlatformImage 不支持的类

我的第二次尝试:

            URL url = file.toURI().toURL();
Image image = new Image(url.toString());
lblAppIconValue.setGraphic(new ImageView(image));

同样不工作......

我的问题:如何将 javax.swing.Icon 设置为 JavaFX 标签?是否可以?如果不可能,我如何从文件中读取缩略图并将其设置为 JavaFX 标签的图标/图形?

谢谢!

最佳答案

切勿使用 impl_ 方法:这些方法不是公共(public) API 的一部分。

要将 awt 图像转换为 FX 图像,javafx.embed.swing 中的 SwingFXUtils 类有一个 toFXImage(...)BufferedImage 转换为 JavaFX Image 的方法。不清楚您从图标中获得的图像是否是 BufferedImage,因此您需要执行几个步骤才能使其正常工作:

BufferedImage bImg ;
if (awtImage instanceof BufferedImage) {
bImg = (BufferedImage) awtImage ;
} else {
bImg = new BufferedImage(awtImage.getWidth(null), awtImage.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = bImg.createGraphics();
graphics.drawImage(awtImage, 0, 0, null);
graphics.dispose();
}
Image fxImage = SwingFXUtils.toFXImage(bImg, null);

这是一种相当低效的方法,因为您首先从文件创建 awt 图像,然后可能通过中间缓冲图像将其转换为 FX 图像。如果您有权访问 ShellFolder 类的源代码,您可能会看到它如何实现 getIcon() 方法并遵循相同的过程。在某些时候,它必须得到一个包含图像数据的 InputStream;一旦你有了它,你就可以将它传递给 javafx.scene.image.Image 构造函数。

关于Java/JavaFX : Set Swing Icon for JavaFX label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26192832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com