JavaFX应用程序图标

时间:2012-04-12 10:43:46

标签: java javafx javafx-2 javafx-8 stage

是否可以使用JavaFX更改应用程序图标,还是必须使用Swing完成?

18 个答案:

答案 0 :(得分:204)

假设您的舞台是“舞台”且文件位于文件系统上:

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

根据下面的评论,如果它被包装在一个包含的jar中,你将需要使用以下方法:

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));

答案 1 :(得分:69)

我试过这个,它完全有效。代码是:

stage.getIcons().add(
   new Image(
      <yourclassname>.class.getResourceAsStream( "icon.png" ))); 

icon.png与源文件位于同一文件夹中。

答案 2 :(得分:64)

初学者的完整程序:)此程序为StackOverflowIcon设置图标。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class StackoverflowIcon extends Application {

    @Override
    public void start(Stage stage) {
        StackPane root = new StackPane();
        // set icon
        stage.getIcons().add(new Image("/path/to/stackoverflow.jpg"));
        stage.setTitle("Wow!! Stackoverflow Icon");
        stage.setScene(new Scene(root, 300, 250));
        stage.show();
    }

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

输出Screnshot

JavaFX Screenshot

  

针对JavaFX 8进行了更新

无需更改代码。它仍然可以正常工作。在Java 1.8(1.8.0_45)中经过测试和验证。路径可以设置为本地或远程都支持。

stage.getIcons().add(new Image("/path/to/javaicon.png"));

OR

stage.getIcons().add(new Image("https://example.com/javaicon.png"));

enter image description here

希望它有所帮助。谢谢!

答案 3 :(得分:6)

你可以在fxml中添加它。阶段水平

<icons>
    <Image url="@../../../my_icon.png"/>
</icons>

答案 4 :(得分:6)

您可以使用此代码行轻松将图标放置到应用程序中

stage.getIcons()。add(new Image(“ image path”));

答案 5 :(得分:5)

如果您有一个图像文件夹并且图标保存在其中,请使用此

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));

如果您直接在包中使用它,这不是一个好习惯,请使用此

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));

如果你有一个文件夹结构并且你的图标里面有

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));

答案 6 :(得分:2)

您如何看待在src目录中创建新包,即image.icons并在那里移动.png图像?比你只需要写:

Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);

这个解决方案非常适合我,但我仍然不确定它是否正确(这里是初学者)。

答案 7 :(得分:1)

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));

您可以使用此方法添加多个不同尺寸的图标。图像应为同一图像的不同尺寸,并选择最佳尺寸。 eg. 16x16, 32,32

答案 8 :(得分:1)

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));

如果你的icon.png在资源目录中,并且记得先放一个'/',否则它将无法正常工作

答案 9 :(得分:1)

stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));

images文件夹需要位于Resource文件夹中。

答案 10 :(得分:0)

stage.getIcons().add(new Image("/images/logo_only.png"));

在src文件夹中创建图像文件夹并从中获取图像是个好习惯。

答案 11 :(得分:0)

我在我的应用程序中使用了这个

{{1}}

这里的窗口是舞台。

答案 12 :(得分:0)

stage.getIcons()。add(new Image((“nospaniol / ui / icons / nospaniol.png”)));

答案 13 :(得分:0)

如果您有Invalid URL or resource not found,则将icon.png放在工作区的“ bin”文件夹中。

答案 14 :(得分:0)

如果运行jar文件,Michael Berry指定的代码将更改标题栏中和任务栏中的图标。快捷方式图标无法更改。

如果运行使用com.zenjava编译的本机程序,则必须添加指向程序图标的链接:

<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
...
<bundleArguments>
   <icon>${project.basedir}/src/main/resources/images/filename.ico</icon>
</bundleArguments>
</configuration>
</plugin>

这会将图标添加到快捷方式和任务栏。

答案 15 :(得分:0)

在运行时切换图标

除了此处的回复外,我发现,一旦您第一次为应用程序分配了图标,就无法通过仅在舞台上添加新图标来切换它(如果您需要切换启用/禁用您的应用的图标)。

要在运行时设置新图标,请在尝试添加新图标之前使用getIcons()。remove(0),其中0是要覆盖的图标的索引,如下所示:

//Setting icon by first time (You can do this on your start method).
stage.getIcons().add(new Image(getClass().getResourceAsStream("enabled.png")));

//Overriding app icon with a new status (This can be in another method)
stage.getIcons().remove(0);
stage.getIcons().add(new Image(getClass().getResourceAsStream("disabled.png")));

要从其他方法或类访问舞台,您可以在主类中为舞台创建一个新的静态字段,因此可以通过封装在可以从任何地方访问的静态方法中,从start()方法之外访问舞台在您的应用中。

public class MainApp extends Application {
    private static Stage stage;
    public static Stage getStage() { return stage; }

    @Override public void start(Stage primaryStage) {
        stage = primaryStage
        stage.getIcons().add(new Image(getClass().getResourceAsStream("enabled.png")));
    }
}

public class AnotherClass {
    public void setStageTitle(String newTitle) {
        MainApp.getStage().setTitle(newTitle);
        MainApp.getStage().getIcons().remove(0);
        MainApp.getStage().getIcons().add(new Image(getClass().getResourceAsStream("disabled.png")));
    }
}

答案 16 :(得分:-1)

我试过这个并且有效:

stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));

答案 17 :(得分:-2)

在JavaFX中在标题栏上插入自己的图标的另一种简单方法是使用以下方法将图像添加到主要阶段:

Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);

确保导入javafx.scene.image.Image(如果使用像netbeans这样的ide应该自动为你完成)。