web-dev-qa-db-fra.com

Définir l'icône sur la scène en JavaFX

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.

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

14
subash

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"));
4
isnot2bad

Meilleur moyen:

stage.getIcons().add(new Image(getClass().getResource(IconImagePath).toExternalForm()));
2
user5591786

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)

1
Maher Abuthraa

n'oubliez pas que votre icône doit être en résolution 32x32 ou 16x16, sinon, cela ne fonctionne pas.

1
ChromeV
// 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.

1
babbi

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"));
1
manikant gautam

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

0
gcclinux