回答:
あなたのステージが「ステージ」であり、ファイルがファイルシステムにあると仮定します:
stage.getIcons().add(new Image("file:icon.png"));
以下のコメントのとおり、それが包含jarでラップされている場合は、代わりに次のアプローチを使用する必要があります。
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
作品を使用する他のソリューションの1つ。
私はこれを試しました、そしてそれは完全に機能します。コードは次のとおりです。
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.pngはソースファイルと同じフォルダにあります。
初心者向けの完全なプログラム:)このプログラムは、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 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"));
それが役に立てば幸い。ありがとう!!
画像フォルダがあり、その中にアイコンが保存されている場合は、これを使用します
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")));
新しいパッケージ、つまりimage.iconsをsrcディレクトリに作成し、そこに.png画像を移動することについてどう思いますか?あなたが書く必要があるよりも:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
このソリューションは私にとっては完璧に機能しますが、それが正しいかどうかはまだわかりません(初心者向け)。
resources
フォルダに配置することをお勧めします。
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
画像フォルダはリソースフォルダにある必要があります。
このコード行を使用して、アプリケーションにアイコンを簡単に配置できます
stage.getIcons()。add(new Image( "image path"));
stage.getIcons().add(new Image("/images/logo_only.png"));
srcフォルダーにimagesフォルダーを作成し、そこから画像を取得するのは良い習慣です。
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>
これにより、ショートカットとタスクバーにアイコンが追加されます。
実行時にアイコンを切り替える:
ここでの応答に加えて、初めてアイコンをアプリケーションに割り当てた後は、ステージに新しいアイコンを追加するだけでは切り替えられないことがわかりました(これは、アプリケーションのアイコンを切り替える必要がある場合に役立ちます)アプリのオン/オフが有効/無効)。
実行時に新しいアイコンを設定するには、新しいアイコンを追加する前に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")));
}
}