Respuestas:
Asumiendo que su etapa es "etapa" y el archivo está en el sistema de archivos:
stage.getIcons().add(new Image("file:icon.png"));
Según el comentario a continuación, si está envuelto en un frasco contenedor, deberá utilizar el siguiente enfoque:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
obras.
Intenté esto y funciona totalmente. El codigo es:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png está en la misma carpeta que los archivos de origen.
Programa completo para principiantes :) Este programa establece un icono para 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);
}
}
Salida Screnshot
Actualizado para JavaFX 8
No es necesario cambiar el código. Aún funciona bien. Probado y verificado en Java 1.8 (1.8.0_45). La ruta se puede establecer en local o remota, ambos son compatibles.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
O
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Espero eso ayude. ¡¡Gracias!!
puedes agregarlo en fxml. Nivel de etapa
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Si tiene una carpeta de imágenes y el icono está guardado en ese, use esto
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
y si lo está utilizando directamente desde su paquete, lo cual no es una buena práctica, use esto
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
y si tiene una estructura de carpetas y tiene su icono dentro de ese uso
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Si su icon.png está en el directorio de recursos y recuerde poner un '/' antes, de lo contrario no funcionará
¿Qué piensas acerca de crear un nuevo paquete, es decir, image.icons en tu directorio src y mover allí tus imágenes .png? Entonces solo necesitas escribir:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Esta solución me funciona perfectamente, pero aún no estoy seguro de si es correcta (principiante aquí).
resources
carpeta.
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
La carpeta de imágenes debe estar en la carpeta de recursos.
Puede poner fácilmente el icono a su aplicación usando esta línea de código
stage.getIcons (). add (nueva imagen ("ruta de imagen"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Es una buena costumbre hacer una carpeta de imágenes en su carpeta src y obtener imágenes de ella.
Si ejecuta el archivo jar, el código especificado por Michael Berry cambiará el icono en la barra de título y en la barra de tareas. El icono de acceso directo no se puede cambiar.
Si ejecuta un programa nativo compilado con com.zenjava, debe agregar un enlace al icono del 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>
Esto agregará un ícono al atajo y la barra de tareas.
Alternar iconos en tiempo de ejecución:
Además de las respuestas aquí, descubrí que una vez que ha asignado un ícono a su aplicación por primera vez, no puede alternarlo simplemente agregando un nuevo ícono a su escenario (esto sería útil si necesita alternar el ícono de su aplicación de encendido / apagado habilitado / deshabilitado).
Para establecer un nuevo ícono durante el tiempo de ejecución, use getIcons (). Remove (0) antes de intentar agregar un nuevo ícono, donde 0 es el índice del ícono que desea anular, como se muestra aquí:
//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 acceder al escenario desde otros métodos o clases, puede crear un nuevo campo estático para el escenario en su clase principal, por lo que puede acceder desde el método start () encapsulando un método estático al que puede acceder desde cualquier lugar de su aplicación .
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")));
}
}
Otra manera fácil de insertar su propio icono en la barra de título en JavaFX es agregar la imagen a su etapa principal utilizando el siguiente método:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Asegúrese de importar javafx.scene.image.Image (si usa un ide como netbeans, esto debería hacerse automáticamente por usted).
Intenté esto y funciona:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));