web-dev-qa-db-ja.com

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

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

152
Sebb77

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

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

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

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

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

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

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

70
user1736233

初心者向けの完全なプログラム:)このプログラムは、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 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

それが役に立てば幸い。ありがとう!!

64
Madan Sapkota

fxmlに追加できます。ステージレベル

<icons>
    <Image url="@../../../my_icon.png"/>
</icons>
6
Dmitrij Krupa

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

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")));
5
Rahul Singh

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

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

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

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

あなたのicon.pngがリソースディレクトリにある場合、それの前に「/」を置くことを忘れないでください。

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

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

1
CTN

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

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

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

imagesフォルダーはResourceフォルダーにある必要があります。

1
PsyhoZOOM

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

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

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

ここがウィンドウです。

0
Moishin
stage.getIcons().add(new Image("/images/logo_only.png"));

Srcフォルダーにimagesフォルダーを作成し、そこから画像を取得するのは良い習慣です。

0
Harshad Vaghela

stage.getIcons()。add(new Image(( "nospaniol/ui/icons/nospaniol.png")));

0
Nospaniol Noah

Invalid URL or resource not foundを取得した場合は、ワークスペースの「bin」フォルダーにicon.pngを配置します。

0
Tim113