是否可以使用JavaFX更改应用程序图标,还是必须使用Swing完成?
假设您的阶段是"阶段"并且文件在文件系统上:
stage.getIcons().add(new Image("file:icon.png"));
根据下面的注释,如果将其包装在一个包含的jar中,则需要使用以下方法:
stage.getIcons().add(new Image(.class.getResourceAsStream("icon.png")));
此外,如果要将图标作为应用程序快捷方式安装,并且您将WebStart用作部署技术,则可能需要在jnlp文件中设置适当的图标/快捷方式/桌面设置:docs.oracle.com/javase/7 /文档/技术说明/引导/ javaws的/
您可以添加多个不同大小的图像,JavaFX将选择最合适的图像。因为您在任务栏中有不同的大小,在标题栏中有不同的大小。
我认为这仅在文件位于文件系统中时才起作用,对于更常见的情况,即图标包装在jar文件中和类路径中,这对我不起作用。使用stage.getIcons().add( new Image( .class.getResourceAsStream("icon.png" )));的其他解决方案之一也适用。
请不要,至少在Ubuntu(Unity)上,该图标仅用于装饰窗口,而不用于启动器。要使图标可见(而不是难看的问号),您需要指定适当的.dektop文件。在这里查看我的描述
并不是很直观,但是请确保图像URL带有file前缀,例如,如果项目根目录下的res文件夹中有徽标,则为:stage.getIcons().add(new Image("file:"+String.valueOf(Paths.get(System.getProperty("user.dir"),"res","logo.png"))));
这只会更改标题栏上的图标,即窗口的左上方。如何在桌面上将应用程序图标更改为快捷方式?在任务栏上?
我正在尝试添加多个图标。但是,只有第一个出现!任何想法 ?谢谢
@sushmithashenoy多个图标旨在作为具有不同分辨率的相同图标,并且JFX将选择最佳图标。它不支持同时显示多个图标。
我试过了,它完全有效。代码是:
stage.getIcons().add(
new Image(
.class.getResourceAsStream("icon.png" )));
icon.png与源文件位于同一文件夹下。
.class可以被getClass()替换
面向初学者的完整程序:)此程序设置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);
}
}
输出画面
Updated for 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"));
希望能帮助到你。谢谢!!
这是否支持svg?
@qed,我认为不支持SVG,但是我不是100%您可以测试一下。
您可以将其添加到fxml中。舞台级别
如果您有图像文件夹,并且在其中保存了图标,请使用此
stage.getIcons().add(new Image(.class.getResourceAsStream("/images/comparison.png")));
如果您直接从包装中使用它(不是一个好习惯),请使用此
stage.getIcons().add(new Image(.class.getResourceAsStream("comparison.png")));
如果您有文件夹结构,并且在其中使用了图标
stage.getIcons().add(new Image(.class.getResourceAsStream("../images/comparison.png")));
您如何看待在src目录中创建新包(即image.icons)并将.png图像移动到那里?比您只需要写:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
该解决方案非常适合我,但是我仍然不确定它是否正确(此处是初学者)。
将资源放在Java包中不是一个好习惯。建议将它们放在您的resources文件夹中。
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
images文件夹必须位于Resource文件夹中。
这个答案是完全没有必要的,因为已经有另一个答案解释了。
stage.getIcons().add(new Image(.class.getResourceAsStream("/icon.png" )));
您可以使用此方法添加多个大小不同的图标。图像的大小应与同一图像的大小不同,并会选择最佳尺寸。
eg. 16x16, 32,32
stage.getIcons().add(new Image(.class.getResourceAsStream("/icon.png")));
如果您的icon.png位于资源目??录中,请记住在前面加上一个" /",否则它将不起作用
您可以使用此代码行轻松将图标放置到应用程序中
stage.getIcons()。add(new Image(" image path"));
我在应用程序中使用了它
Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);
这里的窗户是舞台。
stage.getIcons().add(new Image("/images/logo_only.png"));
将图像文件夹放在src文件夹并从中获取图像是一个好习惯。
这个答案是完全没有必要的,因为已经有另一个答案解释了。
在运行时切换图标:
除了此处的回复之外,我发现,一旦您第一次为应用程序分配了图标,就不能仅通过在舞台上添加新图标来切换它(如果您需要切换图标启用/禁用应用程序)。
要在运行时设置新图标,请在尝试添加新图标之前使用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")));
}
}
stage.getIcons()。add(new Image((" nospaniol / ui / icons / nospaniol.png")));;
目前,您的答案很难理解。请添加一些说明,另请参见此处为何仅代码回答不是最佳答案:meta.stackoverflow.com/questions/300837/
用图标的路径替换" nospaniol / ui / icons / nospaniol.png",并记住它应该在项目的源文件夹中
如果运行jar文件,Michael Berry指定的代码将更改标题栏中和任务栏中的图标。快捷方式图标无法更改。
如果运行使用com.zenjava编译的本机程序,则必须将链接添加到程序图标:
com.zenjava
javafx-maven-plugin
8.8.3
...
${project.basedir}/src/main/resources/images/filename.ico
这会将图标添加到快捷方式和任务栏。
如果得到Invalid URL or resource not found,则将icon.png放在工作区的" bin"文件夹中。
我试过了,它有效:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));
在JavaFX的标题栏上插入自己的图标的另一种简便方法是使用以下方法将图像添加到主舞台:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
确保您导入javafx.scene.image.Image(如果使用像netbeans这样的工具,则应该为您自动完成)。
难道不是上面已经发布了什么?