是否可以使用JavaFX更改应用程序图标,还是必须使用Swing完成?
Answers:
假设您的阶段是“阶段”,并且文件在文件系统上:
stage.getIcons().add(new Image("file:icon.png"));
根据下面的注释,如果将其包装在一个包含的jar中,则需要使用以下方法:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
作品的其他解决方案之一。
面向初学者的完整程序:)此程序设置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);
}
}
输出画面
针对JavaFX 8更新
无需更改代码。它仍然可以正常工作。在Java 1.8(1.8.0_45)中进行了测试和验证。路径可以设置为本地或远程都受支持。
stage.getIcons().add(new Image("/path/to/javaicon.png"));
要么
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
希望能帮助到你。谢谢!!
您可以将其添加到fxml中。舞台级别
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
如果您有图像文件夹,并且在其中保存了图标,请使用此
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")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
如果您的icon.png位于资源目录中,请记住在前面加上一个“ /”,否则它将不起作用
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
images文件夹必须位于Resource文件夹中。
您可以使用此代码行轻松地将图标放置到应用程序中
stage.getIcons()。add(new Image(“ image path”));
stage.getIcons().add(new Image("/images/logo_only.png"));
将图像文件夹放在src文件夹并从中获取图像是一个好习惯。
如果运行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>
这会将图标添加到快捷方式和任务栏。
在运行时切换图标:
除了此处的回复外,我发现,一旦您第一次为应用程序分配了图标,就无法仅通过在舞台上添加新图标来切换它(如果您需要切换图标启用/禁用应用程序)。
要在运行时设置新图标,请在尝试添加新图标之前使用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")));
}
}