Я использую FontAwesomeFX для многих значков в моем приложении. Я хотел бы использовать их как значки для моего Stage
.
Поскольку FontAwesomeIconView
расширяет GlyphIcon
, что расширяет Text
, я не могу использовать его как Image
напрямую.
Есть ли способ создать годный к употреблению Image
из Text
объекта?
Я пытался использовать snapshot
, но я не знаком с этим методом и в итоге получаю стандартный «пустой» значок на моей сцене.
Вот MCVE, который у меня есть:
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.SnapshotParameters;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class FontAwesomeIconExample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple Interface
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(10));
// Convert the FontAwesomeIconView node to an Image
FontAwesomeIconView iconView = new FontAwesomeIconView(FontAwesomeIcon.ID_CARD_ALT);
WritableImage icon = iconView.snapshot(new SnapshotParameters(), null);
primaryStage.getIcons().add(icon);
// Show the stage
primaryStage.setWidth(300);
primaryStage.setHeight(100);
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Sample");
primaryStage.show();
}
}
И результат:
Можно ли использовать снимок узла в качестве значка сцены? Или есть лучший способ преобразования FontAwesomeIconView
для этой цели?
EDIT:
Я испробовал методы как Седрика, так и Дж. Костикиадиса, и оба дали мне одинаковые результаты.
Sedrick-х:
// Convert the FontAwesomeIconView node to an Image
FontAwesomeIconView iconView = new FontAwesomeIconView(FontAwesomeIcon.AMAZON);
WritableImage icon = iconView.snapshot(new SnapshotParameters(), null);
java.awt.image.BufferedImage bImage = SwingFXUtils.fromFXImage(icon, null);
ByteArrayOutputStream s = new ByteArrayOutputStream();
try {
javax.imageio.ImageIO.write(bImage, "png", s);
} catch (IOException e) {
e.printStackTrace();
}
JKostikiadis годы:
FontAwesomeIconView iconView = new FontAwesomeIconView(FontAwesomeIcon.AMAZON);
WritableImage writableImg = iconView.snapshot(null, null);
Image img = SwingFXUtils.toFXImage(SwingFXUtils.fromFXImage(writableImg, null), null);
primaryStage.getIcons().add(img);
Я полагаю, что оба они по сути выполняют одно и то же (размер Image
приводит к различным отображаемым значкам).
Что я сейчас не понимаю, так это значок, который он создает для меня, а не для них ...
Я использую Windows 7 и JDK 1.8.0_161.