Відповіді:
Припустимо, що ваш етап "етап", а файл знаходиться у файловій системі:
stage.getIcons().add(new Image("file:icon.png"));
Відповідно до коментаря нижче, якщо він загорнутий у банку, що містить, замість цього потрібно використовувати наступний підхід:
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 знаходиться в ресурсах dir і не забудьте поставити "/" раніше, інакше це не працюватиме
Що ви думаєте про створення нового пакету, тобто 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")));
Папка зображень повинна бути у папці "Ресурси".
За допомогою цього кодового рядка ви можете легко помістити піктограму у свою програму
stage.getIcons (). add (нове зображення ("шлях зображення"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Це добра звичка робити папки з зображеннями у папці 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 (). Delete (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 (якщо ви використовуєте такий ідею, як netbeans, це потрібно зробити автоматично для вас).
Я спробував це, і це працює:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));