JavaFXアプリケーションアイコン


172

JavaFXを使用してアプリケーションアイコンを変更することは可能ですか、それともSwingを使用して行う必要がありますか?

回答:


234

あなたのステージが「ステージ」であり、ファイルがファイルシステムにあると仮定します:

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

以下のコメントのとおり、それが包含jarでラップされている場合は、代わりに次のアプローチを使用する必要があります。

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

5
さらに、アイコンをアプリケーションのショートカットとしてインストールし、WebStartをデプロイメントテクノロジーとして使用している場合は、jnlpファイルに適切なアイコン/ショートカット/デスクトップ設定を設定することをお勧めし
technotes

9
サイズの異なる複数の画像を追加でき、JavaFXは最適なものを選択します。タスクバーのサイズとタイトルバーのサイズが異なるためです。
drzymala 2013年

11
これはファイルがファイルシステムにある場合にのみ機能すると思います。アイコンがjarファイル内とクラスパスにラップされているより一般的な状況では、これは私にとっては機能しませんでした。stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));作品を使用する他のソリューションの1つ。
k_o_ 2016

3
少なくともUbuntu(Unity)では、アイコンはウィンドウの装飾にのみ使用され、ランチャーには使用されないことに注意してください。(醜い疑問符の代わりに)アイコンを表示するには、適切な.dektopファイルを指定する必要があります。ここに
dzim

1
これにより、タイトルバーのアイコン、つまりウィンドウの左上のみが変更されます。デスクトップ上にあるアプリケーションのアイコンをショートカットとして変更するにはどうすればよいですか?そしてタスクバーに?
TejpalBh 2018年

74

私はこれを試しました、そしてそれは完全に機能します。コードは次のとおりです。

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

icon.pngはソースファイルと同じフォルダにあります。


3
'<yourclassname> .class'は 'getClass()'で置き換えることができます
Jim Fred

71

初心者向けの完全なプログラム:)このプログラムは、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スクリーンショット

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をサポートしていますか?
2014

1
@ qed、SVGはサポートされていないと思いますが、100%確実ではありません。あなたはそれをテストすることができます。
Madan Sapkota、2015

JavaFXアプリケーションのアイコンに.svgファイルを使用してみました。うまく行かなかった。エラーは提供されませんでしたが、JavaFXはカスタムロゴの代わりにデフォルトのロゴを使用しました。
Simon Diemert


7

画像フォルダがあり、その中にアイコンが保存されている場合は、これを使用します

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
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));

icon.pngがリソースディレクトリにある場合は、前に「/」を置くことを忘れないでください。それ以外の場合は機能しません。


2

新しいパッケージ、つまりimage.iconsをsrcディレクトリに作成し、そこに.png画像を移動することについてどう思いますか?あなたが書く必要があるよりも:

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

このソリューションは私にとっては完璧に機能しますが、それが正しいかどうかはまだわかりません(初心者向け)。


Javaパッケージにリソースを配置することはお勧めできません。resourcesフォルダに配置することをお勧めします。
Thibstars

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

この方法を使用して、サイズが異なる複数のアイコンを追加できます。画像は同じ画像のサイズが異なる必要があり、最適なサイズが選択されます。 eg. 16x16, 32,32


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

画像フォルダはリソースフォルダにある必要があります。


4
別の回答ですでに同じことが説明されているため、この回答は完全に不要です。
L.ガタール2017年

1

このコード行を使用して、アプリケーションにアイコンを簡単に配置できます

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



0

これをアプリケーションで使用しました

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

ここが窓です。


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>

これにより、ショートカットとタスクバーにアイコンが追加されます。


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

-1

Invalid URL or resource not foundicon.pngをワークスペースの「bin」フォルダーに配置した場合。


-2

JavaFXのタイトルバーに独自のアイコンを挿入する別の簡単な方法は、次のメソッドを使用して画像をプライマリステージに追加することです。

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

インポートjavafx.scene.image.Imageを確認してください(netbeansのようなIDEを使用している場合、これは自動的に行われます)。


40
それはまさに上に投稿されたものではありませんか?
XXL

-2

私はこれを試しましたが、うまくいきました:

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

実際、.. no:リソース検索ではドットはサポートされていません
。API
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.