java如何绘制javax。摆动将ImageIcon转换为JavaFX。fxml呈现用户界面?
我正在开发一个使用遗留资源提供者的JavaFX富客户端。一个这样提供的资源是javax.swing.ImageIcon
。我必须在从JavaFX渲染的细节对话框中绘制该图标。fxml文件
我发现的工作方式是使用ImageIcon.paintIcon()
方法和java.awt.Graphics
from BufferedImage.createGraphics()
将ImageIcon
绘制成java.awt.image.BufferedImage
。从这个BufferedImage
,javafx.embed.swing.SwingFXUtils.toFXImage()
给出了一个javafx.scene.image.WritableImage
,它可以放在。fxml
以下是转换方法的代码,基于StackOverflow中查看的一些其他解决方案:
private javafx.scene.image.Image atonIcon2ImageConverter(ImageIcon icon) {
BufferedImage bi = new BufferedImage(
icon.getIconWidth(),
icon.getIconHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
// paint the Icon to the BufferedImage.
icon.paintIcon(null, g, 0, 0);
g.dispose();
return SwingFXUtils.toFXImage(bi.getSubimage(0, 1, bi.getWidth(), bi.getHeight()-1), null);
}
虽然这个解决方案是可行的,但在我看来它相当复杂,我想听听专家们对如何让它变得更简单的看法。由于JavaFX是Swing的继承者,我认为很有可能有一种更简单的方法将Swing ImageIcon
放置在JavaFX中。fxml文件(给出了ImageIcon
,但可以质询ImageView
)
编辑:我的解决方案
在尝试并混合了不同的评论和解决方案之后,下面是我为我的真实系统实现所做的。它肯定是一个非常特殊的环境(内部ImageIcon
有一个SwingToolkitImage
),因此它可能不适用于许多:
private javafx.scene.image.Image atonIcon2ImageConverter(ImageIcon icon) {
BufferedImage bi = ((sun.awt.image.ToolkitImage)imageIcon.getImage()).getBufferedImage();
return SwingFXUtils.toFXImage(bi, null);
}
# 1 楼答案
您是否尝试过:
或结合
这是否有效取决于图像图标在遗留代码中的构造方式。下面是一个工作示例。它还包含注释掉的变量,该变量不起作用