在JavaFX中设置舞台上的图标

时间:2013-11-20 11:25:29

标签: java javafx stagewebview

我想知道如何在javaFX舞台上设置图标。 我找到了这种方法,但它无法正常工作。

  stage.getIcons().add(new Image(iconImagePath));

stage是javafx.stage.Stage的一个实例,我导入了javafx.scene.image.Image。 这是我们收到的例外情况:

网址无效:找不到无效的网址或资源

此外,iconImagePath没有任何问题,其值为“G:/test.jpg” 并且G驱动器中有一个名为test的jpg文件。此外,当我们使用ImageIO读取相同的URL时,我们可以轻松完成。

12 个答案:

答案 0 :(得分:15)

stage.getIcons().add(new Image(getClass().getResourceAsStream("bal.png")));

此示例有效。我在与.java源文件相同的文件夹/包中放置了一个图标。

目录结构

答案 1 :(得分:4)

javafx.scene.image.Image的构造函数需要URI,而不是(完整)路径。此URI可以是相对的(例如/images/flower.png)或绝对的(例如file:flower.png)。

G:/test.jpg之类的字符串不是有效的网址,因此非法。

请尝试file:g:/test.jpg

通常,图标应该与您的应用程序捆绑在一起,因此只需将图像文件放入类路径中(例如,如果您正在使用eclipse,将其放入'src'目录中)并使用它:

stage.getIcons().add(new Image("/logo.jpg"));

答案 2 :(得分:2)

最佳方式:

stage.getIcons().add(new Image(getClass().getResource(IconImagePath).toExternalForm()));

答案 3 :(得分:1)

使用

stage.getIcons().add(new Image(("file:logo.png")));

并将image logo.png放在项目的根目录中(在src的同一目录下)

答案 4 :(得分:1)

不要忘记您的图标必须是32x3216x16分辨率,否则,它不起作用。

答案 5 :(得分:1)

这是工作代码,正是您所需要的:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author Manikant gautam
 * This is a beginner's sample application
 * using JAVAFX
 * 
*/

public class Helloworld extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);
        // Set Icon From Here.
        primaryStage.getIcons().add(
            new Image("/resource/graphics/app_logo.png"));
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

按语句设置图标:

primaryStage.getIcons().add(new Image("/resource/graphics/app_logo.png"));

答案 6 :(得分:1)

// Set the icon
stage.getIcons().add(new Image(getClass().getResourceAsStream("penguin.png")));

我遇到了同样的问题。我用过Netbeans。我不确定其他IDE的文件夹结构是否不同,但我必须将图片放在/ build / classes /(包含JavaFX类文件的包)中。这意味着它不会进入src文件夹。

答案 7 :(得分:1)

如果您使用的是 eclipse,请确保将包含图像的文件夹添加到构建路径中。这样,您就可以毫无问题地引用带有名称的图像。enter image description here

答案 8 :(得分:0)

这就是我所做的并且有效。该图像位于我的资源文件夹的根目录中。

stage.getIcons().add(new Image("/ubuntu-mini.png"));

我正在使用JavaFX 8

答案 9 :(得分:-1)

解决方案是:

File f = new File("image.png");
Image ix = new Image(f.toURI().toString());
stage.getIcons().add(ix);

答案 10 :(得分:-1)

public class Main extends Application
{
    private static final Logger LOGGER = Logger.getLogger(Main.class);

    @Override
    public void start(Stage primaryStage)
        {
            try
                {
                    // BorderPane root = new BorderPane();
                    BorderPane root = (BorderPane) FXMLLoader
                            .load(getClass().getResource("/org/geeksynergy/view/layout/FrontPageBorder.fxml"));
                    root.setAccessibleText("good");

                    Scene scene = new Scene(root, 400, 400);
                    scene.getStylesheets().add(getClass()
                            .getResource("/org/geeksynergy/view/cssstyle/application.css").toExternalForm());
                    primaryStage.setScene(scene);
                    primaryStage.setTitle("AiRJuke");
                    primaryStage.getIcons().add(new Image("/org/geeksymergy/resource/images/download.png"));
                    primaryStage.show();
                    AnchorPane personOverview = (AnchorPane) FXMLLoader
                            .load(getClass().getResource("/org/geeksynergy/view/layout/Ui.fxml"));

                    root.setCenter(personOverview);

                    // added this line to save the playlist , when we close
                    // application window
                    Platform.setImplicitExit(false);

                    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>()
                        {
                            public void handle(WindowEvent event)
                                {
                                    M3UPlayList.defaultSavePlaylist();
                                    Platform.setImplicitExit(true);
                                    primaryStage.hide();
                                }
                        });

                } catch (Exception e)
                {

                    LOGGER.error("Exception while loding application", e);
                }
        }

    public static void main(String[] args)
        {
            launch(args);
        }
}

答案 11 :(得分:-1)

我使用netbeans 8.2,如果我使用:    stage.getIcons()。addAll(new Image(getClass()。getResourceAsStream(“home-icon32.png”)));

我必须将图像放在src目录中。不知道为什么,但只是这样工作。我已经尝试将它放在构建/类中,但是否定。