Odpowiedzi:
Zakładając, że Twój etap jest „etapem”, a plik znajduje się w systemie plików:
stage.getIcons().add(new Image("file:icon.png"));
Zgodnie z poniższym komentarzem, jeśli jest zapakowany w zawierający słoik, musisz zamiast tego zastosować następujące podejście:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
działa.
Próbowałem tego i to całkowicie działa. Kod to:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png znajduje się w tym samym folderze co pliki źródłowe.
Pełny program dla początkujących :) Ten program ustawia ikonę dla 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);
}
}
Wyjście Screnshot
Zaktualizowano dla JavaFX 8
Nie ma potrzeby zmiany kodu. Nadal działa dobrze. Przetestowane i zweryfikowane w Javie 1.8 (1.8.0_45). Ścieżka może być ustawiona na lokalną lub zdalną, obsługiwane są oba.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
LUB
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Mam nadzieję, że to pomoże. Dzięki!!
możesz dodać go w fxml. Poziom sceny
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Jeśli masz folder obrazów i ikona jest w nim zapisana, użyj tego
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
a jeśli używasz go bezpośrednio z pakietu, co nie jest dobrą praktyką, użyj tego
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
a jeśli masz strukturę folderów i masz w niej swoją ikonę
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Jeśli twoja ikona.png znajduje się w katalogu zasobów i pamiętaj o wstawieniu „/” przed, w przeciwnym razie nie zadziała
Co myślisz o utworzeniu nowego pakietu tj. Image.icons w swoim katalogu src i przeniesieniu tam obrazów .png? Wystarczy napisać:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
To rozwiązanie działa u mnie idealnie, ale nadal nie jestem pewien, czy jest poprawne (tutaj początkujący).
resources
folderze.
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
folder obrazów musi znajdować się w folderze zasobów.
Możesz łatwo umieścić ikonę w swojej aplikacji za pomocą tej linii kodu
stage.getIcons (). add (nowy obraz ("ścieżka obrazu"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Dobrym zwyczajem jest tworzenie folderu obrazów w folderze src i pobieranie z niego obrazów.
Jeśli uruchomisz plik jar, kod określony przez Michaela Berry'ego zmieni ikonę na pasku tytułu i na pasku zadań. Nie można zmienić ikony skrótu.
Jeśli uruchamiasz program natywny skompilowany za pomocą com.zenjava, musisz dodać link do ikony programu:
<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>
Spowoduje to dodanie ikony do skrótu i paska zadań.
Przełącz ikony w czasie wykonywania:
Oprócz odpowiedzi tutaj stwierdziłem, że po przypisaniu ikony do aplikacji po raz pierwszy nie można jej przełączać, po prostu dodając nową ikonę do sceny (byłoby to pomocne, gdybyś musiał zmienić ikonę swojego aplikacja od wł. / wył. włączona / wyłączona).
Aby ustawić nową ikonę w czasie wykonywania, użyj funkcji getIcons (). Remove (0) przed próbą dodania nowej ikony, gdzie 0 to indeks ikony, którą chcesz zastąpić, jak pokazano tutaj:
//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")));
Aby uzyskać dostęp do etapu z innych metod lub klas, możesz utworzyć nowe pole statyczne dla etapu w swojej głównej klasie, aby uzyskać do niego dostęp z metody start () poprzez hermetyzację metody statycznej, do której można uzyskać dostęp z dowolnego miejsca w aplikacji .
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")));
}
}
Innym prostym sposobem na wstawienie własnej ikony na pasku tytułu w JavaFX jest dodanie obrazu do głównego stołu montażowego przy użyciu następującej metody:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Upewnij się, że importujesz javafx.scene.image.Image (jeśli używasz ide, takiego jak netbeans, powinno to być zrobione automatycznie).
Spróbowałem tego i działa:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));