Respostas:
Supondo que seu estágio seja "estágio" e o arquivo esteja no sistema de arquivos:
stage.getIcons().add(new Image("file:icon.png"));
Conforme o comentário abaixo, se estiver envolto em um frasco contendo, você precisará usar a seguinte abordagem:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
obras.
Eu tentei isso e funciona totalmente. O código é:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png está na mesma pasta que os arquivos de origem.
Programa completo para iniciantes :) Este programa define o ícone do 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);
}
}
Screnshot de saída
Atualizado para JavaFX 8
Não há necessidade de alterar o código. Ainda funciona bem. Testado e verificado em Java 1.8 (1.8.0_45). O caminho pode ser definido como local ou remoto, ambos são suportados.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
OU
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Espero que ajude. Obrigado!!
você pode adicioná-lo em fxml. Nível de estágio
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Se você possui uma pasta de imagens e o ícone é salvo, use este
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
e se você o estiver usando diretamente do seu pacote, o que não é uma boa prática, use este
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
e se você tiver uma estrutura de pastas e seu ícone dentro desse uso
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Se o seu icon.png estiver no diretório de recursos e lembre-se de colocar um '/' antes, caso contrário, não funcionará
O que você acha de criar um novo pacote, por exemplo, image.icons no diretório src e mover para lá as imagens .png? Do que você só precisa escrever:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Esta solução funciona perfeitamente para mim, mas ainda não tenho certeza se está correta (iniciante aqui).
resources
pasta.
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
pasta de imagens precisa estar na pasta Recurso.
Você pode facilmente colocar o ícone no seu aplicativo usando esta linha de código
stage.getIcons (). add (new Image ("caminho da imagem"));
stage.getIcons().add(new Image("/images/logo_only.png"));
É um bom hábito criar uma pasta de imagens na sua pasta src e obter imagens dela.
Se você executar o arquivo jar, o código especificado por Michael Berry alterará o ícone na barra de título e na barra de tarefas. O ícone de atalho não pode ser alterado.
Se você executar um programa nativo compilado com com.zenjava, deverá adicionar um link ao ícone do programa:
<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>
Isso adicionará um ícone ao atalho e barra de tarefas.
Alterne ícones no tempo de execução:
Além das respostas aqui, descobri que depois de atribuir um ícone ao seu aplicativo pela primeira vez, você não pode alterná-lo apenas adicionando um novo ícone ao seu estágio (isso seria útil se você precisar alternar o ícone do seu aplicativo aplicativo ativado / desativado).
Para definir um novo ícone durante o tempo de execução, use o método getIcons (). Remove (0) antes de tentar adicionar um novo ícone, onde 0 é o índice do ícone que você deseja substituir, como é mostrado aqui:
//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")));
Para acessar o estágio a partir de outros métodos ou classes, você pode criar um novo campo estático para o estágio na classe principal, para acessá-lo desde o método start () encapsulando um método estático que você pode acessar de qualquer lugar no seu aplicativo .
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")));
}
}
Outra maneira fácil de inserir seu próprio ícone na barra de título no JavaFX é adicionar a imagem ao seu estágio primário usando o seguinte método:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Certifique-se de importar javafx.scene.image.Image (se estiver usando um ide como o netbeans, isso deve ser feito automaticamente para você).
Eu tentei isso e funciona:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));