我如何将javax.swing.ImageIcon绘制为JavaFX .fxml呈现的用户界面?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何将javax.swing.ImageIcon绘制为JavaFX .fxml呈现的用户界面?相关的知识,希望对你有一定的参考价值。

我正在开发使用传统资源提供者的JavaFX富客户端。这样提供的资源之一是javax.swing.ImageIcon。我必须在从JavaFX .fxml文件呈现的详细信息对话框中绘制该图标。

[我发现工作的方法是使用ImageIcon中的java.awt.image.BufferedImage使用ImageIcon.paintIcon()方法将java.awt.Graphics绘制为BufferedImage.createGraphics()。从该BufferedImage中,javafx.embed.swing.SwingFXUtils.toFXImage()给出一个javafx.scene.image.WritableImage,可以将其放置在.fxml的ImageView中。

这是转换方法的代码,基于此处在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内部具有Swing ToolkitImage),因此它可能不适用于许多环境:

private javafx.scene.image.Image atonIcon2ImageConverter(ImageIcon icon) 
    BufferedImage bi = ((sun.awt.image.ToolkitImage)imageIcon.getImage()).getBufferedImage();
    return SwingFXUtils.toFXImage(bi, null);

我正在开发使用遗留资源提供者的JavaFX富客户端。这样提供的资源之一是javax.swing.ImageIcon。我必须在从...

答案

您是否尝试过:

以上是关于我如何将javax.swing.ImageIcon绘制为JavaFX .fxml呈现的用户界面?的主要内容,如果未能解决你的问题,请参考以下文章

matlab改变GUI和figure左上角图标的方法,并生成exe文件

我无法将 javascript 文件应用到 Wordpress。我如何将脚本排入队列?

我应该如何将 DbContext 实例注入 IHostedService?

如何将图像写入文件?

如何将脚本实现到 LibGDX 中?

我如何将合并的图像用于Swift动画?