2012-04-12 141 views

回答

152

假设你的舞台是“舞台”,并且该文件的文件系统:

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

按照下面的评论,如果它包裹在一个含有罐子就需要用下面的办法来代替:

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

此外,如果要将图标安装为应用程序快捷方式,并且您将WebStart用作部署技术,则可能需要在jnlp文件中设置相应的图标/快捷方式/桌面设置:http:// docs。 oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html – jewelsea 2012-04-12 17:34:42

+9

您可以添加多个不同大小的图像,JavaFX将选择最适合的图像。因为你在任务栏中有不同的大小,而在标题栏中有不同的大小。 – drzymala 2013-01-11 20:53:54

+9

我认为这只在文件在文件系统中时才起作用,对于图标被包装在jar文件和类路径中的更常见的情况,这不适用于我。使用stage.getIcons()的其他解决方案之一add( new Image( .class.getResourceAsStream(“icon.png”)));'works。 – 2016-02-13 00:19:12

58

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

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

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

-2

另一种简单的方法来插入JavaFX的标题栏上自己的图标是使用下面的方法将图像添加到您的初级阶段:

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

确保您的进口javafx.scene.image.Image (如果使用netbeans这样的IDE,应该自动为你完成)。

+34

是不是**完全* *以上发布的内容? – XXL 2012-12-03 12:39:16

53

初学者的完整程序:)此程序设置堆栈溢出图标。

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

希望它能帮助。谢谢!!

+0

这是否支持svg? – qed 2014-08-03 22:36:34

+0

@qed,我不认为SVG是支持的,但我不是100%确定的。你可以测试它。 – 2015-07-04 06:24:21

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

如果您的icon.png是资源目录,记得把“/”之前,否则将无法正常工作

0

我想这和它的作品:

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

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

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"))); 
2

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

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

这个解决方案对我完美的作品,但我仍然不知道这是否正确(初学者在这里)。

5

您可以将其添加到fxml中。舞台级

<icons> 
    <Image url="@../../../my_icon.png"/> 
</icons> 
0
stage.getIcons().add(new Image("/images/logo_only.png")); 

这是好习惯,使图像文件夹中的src目录,并从它那里得到的图像。

+0

这个答案是完全不必要的,因为[另一个答案](https://stackoverflow.com/a/10122335/8283469)已经解释过了。 – 2017-11-28 12:41:24

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

图片文件夹需要在资源文件夹中。

+1

这个答案是完全不必要的,因为[另一个答案](https://stackoverflow.com/a/10122335/8283469)已经解释过了。 – 2017-11-28 12:39:20

0

我用这个在我的应用

Image icon = new Image(getClass().getResourceAsStream("icon.png")); 
window.getIcons().add(icon); 

下面窗口的舞台。