是否可以使用JavaFX更改应用程序图标,还是必须使用Swing?
当前回答
在运行时切换图标:
除了这里的响应,我发现一旦你第一次分配了一个图标到你的应用程序,你不能通过添加一个新图标到你的舞台来切换它(这将有助于你的应用程序的图标从打开/关闭启用/禁用)。
要在运行时设置一个新图标,在尝试添加一个新图标之前使用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")));
为了从其他方法或类中访问stage,你可以在你的主类中为stage创建一个新的静态字段,这样就可以从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")));
}
}
其他回答
假设你的stage是“stage”,文件在文件系统上:
stage.getIcons().add(new Image("file:icon.png"));
根据下面的评论,如果它被包装在一个容器中,你将需要使用以下方法:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add(new Image("/images/logo_only.png"));
在src文件夹中创建图像文件夹并从中获取图像是一个好习惯。
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));
您可以使用此方法添加多个不同大小的图标。这些图像应该是同一图像的不同大小,并将选择最佳大小。 如。32岁的16 x16 32
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
如果你的icon.png在资源目录下,记得在前面加上一个“/”,否则它将不起作用
使用这段代码行,您可以轻松地将图标放到应用程序中
stage.getIcons().add(new Image(“image path”) );
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap