Иконка приложения JavaFX

Можно ли изменить значок приложения с помощью JavaFX, или это нужно сделать с помощью Swing?

Ответ 1

Предполагая, что ваша сцена "stage", и файл находится в файловой системе:

stage.getIcons().add(new Image("file:icon.png"));

В соответствии с комментарием ниже, если он завернут в содержащую банку, вам нужно будет использовать следующий подход:

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));

Ответ 2

Я пробовал это, и он полностью работает. Код:

stage.getIcons().add(
   new Image(
      <yourclassname>.class.getResourceAsStream( "icon.png" ))); 

icon.png находится в той же папке, что и исходные файлы.

Ответ 3

Полная программа для начинающих :) Эта программа устанавливает значок для QaruIcon.

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);
    }
}

Выходной скриншот

JavaFX Screenshot

Обновлено для 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"));

enter image description here

Надеюсь, это поможет. Спасибо!!

Ответ 4

вы можете добавить его в fxml. Уровень сцены

<icons>
    <Image url="@../../../my_icon.png"/>
</icons>

Ответ 5

Если у вас есть папка с изображениями, и значок сохраняется в этом режиме, используйте

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

Ответ 6

Что вы думаете о создании нового пакета i.e image.icons в вашем каталоге src и перемещении туда вас .png изображений? Чем вам просто нужно написать:

Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);

Это решение работает для меня отлично, но я не уверен, правильно ли он (новичок здесь).

Ответ 7

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));

Если ваш icon.png находится в ресурсах dir и не забудьте поставить "/", иначе он не будет работать.

Ответ 8

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));

С помощью этого метода вы можете добавить несколько иконок разных размеров. Изображения должны быть разных размеров одного и того же изображения, и будет выбран лучший размер. eg. 16x16, 32,32

Ответ 9

stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));

папка с изображениями должна находиться в папке ресурсов.

Ответ 10

Вы можете легко поместить значок в свое приложение, используя эту строку кода

stage.getIcons(). add (новое изображение ("путь к изображению"));

Ответ 11

stage.getIcons().add(new Image("/images/logo_only.png"));

Хорошая привычка делать папку с изображениями в вашей папке src и получать из нее изображения.

Ответ 12

Я использовал это в своем приложении

Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);

Здесь окно - это этап.

Ответ 13

stage.getIcons(). add (новое изображение (("nospaniol/ui/icons/nospaniol.png")));

Ответ 14

Если вы запустите 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>

Это добавит значок на ярлык и панель задач.

Ответ 15

Переключить значки во время выполнения:

В дополнение к ответам, приведенным здесь, я обнаружил, что, как только вы в первый раз назначили значок своему приложению, вы не можете переключать его, просто добавляя новый значок на сцену (это будет полезно, если вам нужно переключить значок вашего приложения). приложение из вкл/выкл включено/отключено).

Чтобы установить новый значок во время выполнения, используйте 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")));
}
} 

Ответ 16

Я пробовал это, и он работает:

stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));

Ответ 17

Изображение image3 = новое изображение ("Путь");
. Stage.getIcons() добавить (image3);

Ответ 18

Если у вас есть Invalid URL or resource not found поместите свой значок.png в папку "bin" в вашей рабочей области.

Ответ 19

Еще один простой способ вставить свой собственный значок в строку заголовка в JavaFX - это добавить изображение на ваш основной этап, используя следующий метод:

Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);

Убедитесь, что ваш импорт javafx.scene.image.Image(если вы используете идеал, например netbeans, это должно быть автоматически сделано для вас).

Ответ 20

Вы можете использовать кросс-платформенный инструмент для упаковки приложений Java. После того, как вы сделали файл jar/exe, вы можете использовать этот инструмент для изменения значка приложения.

Перейдите по этой ссылке http://launch4j.sourceforge.net/

Шаг 1: Загрузка файла start4j-3.9-win32.zip  введите описание изображения здесь

Шаг 2. Запустите файл launch4j.exe и в поле значка выберите файл значка (.ico). Также заполните основные данные, такие как "Min jre Version" на вкладке jre.. и т.д. введите описание изображения здесь