web-dev-qa-db-fra.com

Icône d'application JavaFX

Est-il possible de changer l'icône de l'application avec JavaFX ou faut-il le faire avec Swing?

141
Sebb77

En supposant que votre scène est "stage" et que le fichier se trouve sur le système de fichiers:

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

Selon le commentaire ci-dessous, s'il est enveloppé dans un pot contenant, vous devez utiliser l'approche suivante:

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

J'ai essayé cela et ça fonctionne totalement. Le code est:

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

icon.png se trouve dans le même dossier que les fichiers source.

66
user1736233

Programme complet pour les débutants :) Ce programme a défini Stack Overflow Icon.

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

Sortie Screnshot

JavaFX Screenshot

Mis à jour pour JavaFX 8

Pas besoin de changer le code. Cela fonctionne toujours bien. Testé et vérifié en Java 1.8 (1.8.0_45). Le chemin d'accès peut être défini sur local ou distant.

stage.getIcons().add(new Image("/path/to/javaicon.png"));

OR

stage.getIcons().add(new Image("https://example.com/javaicon.png"));

enter image description here

J'espère que ça aide. Merci!!

64
Madan Sapkota

vous pouvez l'ajouter au format xml. Niveau de scène

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

Si vous avez un dossier d’images et que l’icône est enregistrée, utilisez cette 

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

et si vous l'utilisez directement depuis votre paquet, ce qui n'est pas une bonne pratique, utilisez cette

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

et si vous avez une structure de dossier et que vous avez votre icône à l'intérieur de cette utilisation

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
5
Rahul Singh

Vous pouvez facilement mettre une icône sur votre application en utilisant cette ligne de code

stage.getIcons (). add (new Image ("chemin de l'image"));

3

Que pensez-vous de la création d’un nouveau paquetage i.e image.icons dans votre répertoire src et du déplacement de vos images .png? Alors vous avez juste besoin d'écrire:

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

Cette solution fonctionne parfaitement pour moi, mais je ne suis toujours pas sûr que ce soit correct (débutant ici).

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

Si votre icon.png est dans le répertoire des ressources et souvenez-vous de mettre un '/' avant sinon cela ne fonctionnera pas

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

Vous pouvez ajouter plusieurs icônes de différentes tailles en utilisant cette méthode. Les images doivent avoir différentes tailles pour la même image et la meilleure taille sera choisie .eg. 16x16, 32,32

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

le dossier images doit être dans le dossier Ressource.

1
PsyhoZOOM

Si vous exécutez le fichier jar, le code spécifié par Michael Berry changera l'icône dans la barre de titre et dans la barre des tâches. L'icône de raccourci ne peut pas être modifiée.

Si vous exécutez un programme natif compilé avec com.zenjava, vous devez ajouter un lien à l'icône du programme:

<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>

Cela ajoutera une icône au raccourci et à la barre des tâches.

0

Basculer les icônes au moment de l'exécution:

En plus des réponses ici, j’ai constaté qu’une fois que vous avez attribué une icône à votre candidature pour la première fois, vous ne pouvez plus la changer en ajoutant simplement une nouvelle icône à votre étape (cela serait utile si vous devez basculer l’icône de votre app de/activé activé/désactivé).

Pour définir une nouvelle icône pendant l'exécution, utilisez getIcons (). Remove (0) avant d'essayer d'ajouter une nouvelle icône, où 0 représente l'index de l'icône que vous souhaitez remplacer, comme indiqué ci-dessous:

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

Pour accéder à l'étape à partir d'autres méthodes ou classes, vous pouvez créer un nouveau champ statique pour l'étape dans votre classe principale. Vous pouvez y accéder depuis la méthode start () en encapsulant une méthode statique à laquelle vous pouvez accéder depuis n'importe où dans votre application. .

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

Je l'ai utilisé dans mon application

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

Ici la fenêtre est la scène.

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

C'est une bonne habitude de créer un dossier images dans votre dossier src et d’obtenir des images de celui-ci.

0
Harshad Vaghela

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

0
Nospaniol Noah

Si vous avez obtenu Invalid URL or resource not found, placez votre icon.png dans le dossier "bin" de votre espace de travail.

0
Tim113