Je voulais savoir comment définir des icônes sur la scène javaFX. J'ai trouvé cette méthode, mais cela n'a pas fonctionné correctement.
stage.getIcons().add(new Image(iconImagePath));
stage est une instance de javafx.stage.Stage et j'ai importé javafx.scene.image.Image. C'est l'exception que nous recevons:
URL non valide: URL non valide ou ressource non trouvée
En outre, iconImagePath ne présente aucun problème, sa valeur est "G: /test.jpg" et il existe un fichier jpg dans le lecteur G nommé test. De plus, lorsque nous utilisons ImageIO pour lire la même URL, nous pouvons le faire facilement.
stage.getIcons().add(new Image(getClass().getResourceAsStream("bal.png")));
Cet exemple fonctionne. J'ai placé une icône dans le même dossier/package que le fichier .Java source.
Structure de l'annuaire
Les constructeurs de javafx.scene.image.Image
s'attendent à un URI et non à un chemin (complet). Cet URI peut être soit relatif (par exemple, /images/flower.png
), soit absolu (par exemple, file:flower.png
).
Des chaînes telles que G:/test.jpg
ne sont pas des URL valides et sont donc illégales.
Essayez file:g:/test.jpg
à la place.
Habituellement, les icônes doivent être associées à votre application. Il vous suffit donc de placer le fichier image dans votre chemin de classe (par exemple, si vous utilisez Eclipse, placez-le dans votre répertoire "src") et utilisez-le ainsi:
stage.getIcons().add(new Image("/logo.jpg"));
Meilleur moyen:
stage.getIcons().add(new Image(getClass().getResource(IconImagePath).toExternalForm()));
utilisation
stage.getIcons().add(new Image(("file:logo.png")));
et mettez l'image logo.png à la racine de votre projet (dans le même répertoire que src)
n'oubliez pas que votre icône doit être en résolution 32x32
ou 16x16
, sinon, cela ne fonctionne pas.
// Set the icon
stage.getIcons().add(new Image(getClass().getResourceAsStream("penguin.png")));
J'ai rencontré le même problème. J'ai utilisé Netbeans. Je ne sais pas si la structure de dossiers est différente pour d'autres IDE, mais je devais placer l'image dans/build/classes/(le package contenant le fichier de classe JavaFX). Cela signifie qu'il ne va pas dans le dossier src.
Voici le code de travail, qui correspond exactement à ce que vous avez dit.
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
*
* @author Manikant gautam
* This is a beginner's sample application
* using JAVAFX
*
*/
public class Helloworld extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
// Set Icon From Here.
primaryStage.getIcons().add(
new Image("/resource/graphics/app_logo.png"));
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
// set Icon by statement
primaryStage.getIcons().add(
new Image("/resource/graphics/app_logo.png"));
C'est ce que j'ai fait et ça marche. L'image se trouve à la racine de mon dossier de ressources.
stage.getIcons().add(new Image("/ubuntu-mini.png"));
J'utilise JavaFX 8