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

问题描述 投票:0回答:1

我正在开发使用传统资源提供者的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。我必须在从...

swing javafx-8 fxml
1个回答
1
投票

您是否尝试过:

© www.soinside.com 2019 - 2024. All rights reserved.