Ответы:
Предполагая, что ваш этап - «этап», а файл находится в файловой системе:
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" )));
работ.
Я попробовал это, и это полностью работает. Код является:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png находится в той же папке, что и исходные файлы.
Полная программа для начинающих :) Эта программа устанавливает значок для 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);
}
}
Выходной скриншот
Обновлено для 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"));
Надеюсь, поможет. Спасибо!!
Вы можете добавить его в fxml. Уровень сцены
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Если у вас есть папка с изображениями и значок сохранен в этом, используйте эту
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")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Если ваш icon.png находится в каталоге ресурсов, и не забудьте поставить «/», иначе он не будет работать
Что вы думаете о создании нового пакета, т.е. image.icons, в вашем каталоге src и перемещении туда ваших изображений .png? Чем вам просто нужно написать:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Это решение отлично работает для меня, но все же я не уверен, правильно ли оно (новичок здесь).
resources
папку.
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));
Используя этот метод, вы можете добавить более одного значка с разными размерами. Изображения должны быть разных размеров одного и того же изображения, и будет выбран лучший размер.
eg. 16x16, 32,32
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
Папка images должна находиться в папке Resource.
Вы можете легко поместить значок в свое приложение, используя эту строку кода
stage.getIcons (). add (new Image ("путь к изображению"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Хорошей привычкой является создание папки images в папке src и получение изображений из нее.
Если вы запустите 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>
Это добавит значок на ярлык и панель задач.
Переключить значки во время выполнения:
В дополнение к ответам, приведенным здесь, я обнаружил, что, как только вы в первый раз назначили значок своему приложению, вы не можете переключать его, просто добавив новый значок на сцену (это будет полезно, если вам нужно переключить значок вашего приложения). приложение из вкл / выкл включено / отключено).
Чтобы установить новый значок во время выполнения, используйте 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")));
}
}
Еще один простой способ вставить свой собственный значок в строку заголовка в JavaFX - добавить изображение на начальный этап, используя следующий метод:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Убедитесь, что вы импортируете javafx.scene.image.Image (если вы используете ide как netbeans, это должно быть сделано автоматически для вас).
Я попробовал это, и это работает:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));