在JavaFX上的Button中加载SVG文件

时间:2016-10-17 03:57:38

标签: svg javafx javafx-2

我在Inkscape中创建了一个SVG图像。我把它放在与我班级相同的目录中。

有没有办法加载该图像并将其转换为SVG路径?

这背后的想法是使用getClass().getResource("image.svg").toExternalForm()获取该图像并将其转换为imageSVG.setContent()方法的SVGPath。之后,我想将该SVGPath对象放在一个带有button.setGraphic()方法的Button中。

我不想使用Transcoders或BufferedImage类。

1 个答案:

答案 0 :(得分:7)

使用https://github.com/afester/FranzXaver提供的SvgLoader,您只需将SVG文件作为JavaFX节点加载,并将其设置在按钮上作为其图形:

...
    // load the svg file
    InputStream svgFile = 
          getClass().getResourceAsStream("/afester/javafx/examples/data/Ghostscript_Tiger.svg");
    SvgLoader loader = new SvgLoader();
    Group svgImage = loader.loadSvg(svgFile);

    // Scale the image and wrap it in a Group to make the button 
    // properly scale to the size of the image  
    svgImage.setScaleX(0.1);
    svgImage.setScaleY(0.1);
    Group graphic = new Group(svgImage);

    // create a button and set the graphics node
    Button button = new Button();
    button.setGraphic(graphic);

    // add the button to the scene and show the scene
    HBox layout = new HBox(button);
    HBox.setMargin(button, new Insets(10));
    Scene scene = new Scene(layout);
    primaryStage.setScene(scene);
    primaryStage.show();
...

Screenshot of image on button