Иконка приложения JavaFX
Можно ли изменить значок приложения с помощью JavaFX или это нужно сделать с помощью Swing?
16 ответов
Предполагая, что ваш этап - "этап", а файл находится в файловой системе:
stage.getIcons().add(new Image("file:icon.png"));
Согласно комментарию ниже, если он помещен в содержащий jar, вам нужно будет использовать следующий подход:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
Я попробовал это, и это полностью работает. Код является:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png находится в той же папке, что и исходные файлы.
Полная программа для начинающих:) В этой программе установлен значок переполнения стека.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class StackruIcon extends Application {
@Override
public void start(Stage stage) {
StackPane root = new StackPane();
// set icon
stage.getIcons().add(new Image("/path/to/stackru.jpg"));
stage.setTitle("Wow!! Stackru Icon");
stage.setScene(new Scene(root, 300, 250));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Выходной скриншот
Обновлено для JavaFX 8
Не нужно менять код. Это все еще работает отлично. Протестировано и проверено в Java 1.8(1.8.0_45). Путь может быть установлен на локальный или удаленный оба поддерживаются.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
ИЛИ ЖЕ
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Надеюсь, поможет. Спасибо!!
Если у вас есть папка с изображениями и значок сохранен в этом, используйте эту
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
и если вы используете его непосредственно из своего пакета, что не является хорошей практикой, используйте это
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
и если у вас есть структура папок и у вас есть значок внутри этого использования
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
Вы можете добавить его в fxml. Уровень сцены
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Вы можете легко поместить значок в свое приложение, используя эту строку кода
stage.getIcons().add(new Image("путь к изображению"));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Если ваш icon.png находится в каталоге ресурсов, и не забудьте поставить "/", иначе он не будет работать
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
Папка с изображениями должна находиться в папке Resource.
Что вы думаете о создании нового пакета, т.е. image.icons, в вашем каталоге src и перемещении туда ваших изображений.png? Чем вам просто нужно написать:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Это решение отлично работает для меня, но все же я не уверен, правильно ли оно (новичок здесь).
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));
Используя этот метод, вы можете добавить более одного значка с разными размерами. Изображения должны быть разных размеров одного и того же изображения, и будет выбран лучший размер.eg. 16x16, 32,32
Я использовал это в моем приложении
Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);
Здесь окно - сцена.
stage.getIcons().add(new Image("/images/logo_only.png"));
Хорошей привычкой является создание папки images в папке src и получение изображений из нее.
Переключить значки во время выполнения:
В дополнение к приведенным здесь ответам я обнаружил, что после того, как вы впервые назначили значок своему приложению, вы не можете переключить его, просто добавив новый значок на свою сцену (это было бы полезно, если вам нужно переключить значок своего приложение от включения / выключения включено / выключено).
Чтобы установить новый значок во время выполнения, используйте getIcons(). Remove(0) перед попыткой добавить новый значок, где 0 - это индекс значка, который вы хотите переопределить, как показано здесь:
//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")));
Чтобы получить доступ к этапу из других методов или классов, вы можете создать новое статическое поле для этапа в основном классе, чтобы получить к нему доступ из метода start(), инкапсулируя его в статический метод, к которому вы можете получить доступ из любого места в своем приложении..
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")));
}
}
Если вы запустите файл jar, код, указанный Майклом Берри, изменит значок в строке заголовка и на панели задач. Значок ярлыка нельзя изменить.
Если вы запускаете собственную программу, скомпилированную с помощью com.zenjava, вы должны добавить ссылку на значок программы:
<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>
Это добавит значок к ярлыку и панели задач.
stage.getIcons().add(new Image(("nospaniol/ui/icons/nospaniol.png")));
Я попробовал это, и это работает:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));
Image image3 = новое изображение ("Путь");
. Stage.getIcons() добавить (image3);
Если вы получили Invalid URL or resource not found
поместите ваш icon.png в папку "bin" в вашем рабочем пространстве.
Другой простой способ вставить свой собственный значок в строку заголовка в JavaFX - добавить изображение на начальный этап, используя следующий метод:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Убедитесь, что вы импортируете javafx.scene.image.Image (если вы используете ide как netbeans, это должно быть сделано автоматически для вас).