Câu trả lời:
Giả sử giai đoạn của bạn là "giai đoạn" và tệp nằm trong hệ thống tệp:
stage.getIcons().add(new Image("file:icon.png"));
Theo nhận xét bên dưới, nếu nó được bọc trong một bình chứa, bạn sẽ cần sử dụng phương pháp sau:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
công trình.
Tôi đã thử điều này và nó hoàn toàn hoạt động. Mã này là:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png nằm trong cùng thư mục với các tệp nguồn.
Chương trình đầy đủ cho người mới bắt đầu :) Chương trình này đặt biểu tượng cho 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);
}
}
Đầu ra Screnshot
Đã cập nhật cho JavaFX 8
Không cần thay đổi mã. Nó vẫn hoạt động tốt. Đã thử nghiệm và xác minh trong Java 1.8 (1.8.0_45). Đường dẫn có thể được đặt thành cục bộ hoặc từ xa cả hai đều được hỗ trợ.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
HOẶC LÀ
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Hy vọng nó giúp. Cảm ơn!!
bạn có thể thêm nó trong fxml. Cấp độ sân khấu
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Nếu bạn có một thư mục hình ảnh và biểu tượng được lưu trong đó sử dụng cái này
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
và nếu bạn đang trực tiếp sử dụng nó từ gói của bạn mà không phải là một thực hành tốt, hãy sử dụng nó
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
và nếu bạn có cấu trúc thư mục và bạn có biểu tượng của mình bên trong sử dụng
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Nếu icon.png của bạn nằm trong thư mục tài nguyên và nhớ đặt '/' trước nếu không nó sẽ không hoạt động
Bạn nghĩ gì về việc tạo gói mới tức là image.icons trong thư mục src của bạn và di chuyển đến đó hình ảnh .png của bạn? Hơn bạn chỉ cần viết:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Giải pháp này hoàn toàn phù hợp với tôi, nhưng tôi vẫn không chắc liệu nó có đúng không (người mới bắt đầu ở đây).
resources
thư mục của bạn .
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
thư mục hình ảnh cần phải có trong thư mục tài nguyên.
Bạn có thể dễ dàng đặt biểu tượng cho ứng dụng của mình bằng dòng mã này
stage.getIcons (). add (Hình ảnh mới ("đường dẫn hình ảnh"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Đó là thói quen tốt để tạo thư mục hình ảnh trong thư mục src của bạn và lấy hình ảnh từ nó.
Nếu bạn chạy tệp jar, mã được chỉ định bởi Michael Berry sẽ thay đổi biểu tượng trong thanh tiêu đề và trên thanh tác vụ. Biểu tượng phím tắt không thể thay đổi.
Nếu bạn chạy một chương trình gốc được biên dịch bằng com.zenjava, Bạn phải thêm một liên kết đến biểu tượng chương trình:
<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>
Điều này sẽ thêm một biểu tượng vào phím tắt và thanh tác vụ.
Chuyển đổi biểu tượng trong thời gian chạy:
Ngoài các câu trả lời ở đây, tôi thấy rằng một khi bạn đã gán Biểu tượng cho ứng dụng của mình lần đầu tiên, bạn không thể chuyển đổi nó bằng cách chỉ thêm một biểu tượng mới vào giai đoạn của bạn (điều này sẽ hữu ích nếu bạn cần chuyển đổi biểu tượng của bạn ứng dụng bật / tắt bật / tắt).
Để đặt biểu tượng mới trong thời gian chạy, hãy sử dụng getIcons (). Remove (0) trước khi thử thêm biểu tượng mới, trong đó 0 là chỉ mục của biểu tượng bạn muốn ghi đè như được hiển thị ở đây:
//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")));
Để truy cập vào giai đoạn từ các phương thức hoặc các lớp khác, bạn có thể tạo một trường tĩnh mới cho giai đoạn trong lớp chính của bạn để có thể truy cập nó từ phương thức start () bằng cách gói gọn trong một phương thức tĩnh mà bạn có thể truy cập từ bất kỳ đâu trong ứng dụng của mình .
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")));
}
}
Một cách dễ dàng khác để chèn biểu tượng của riêng bạn vào thanh tiêu đề trong JavaFX là thêm hình ảnh vào giai đoạn chính của bạn bằng phương pháp sau:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Đảm bảo nhập javafx.scene.image.Image (nếu sử dụng ide như netbeans, việc này sẽ tự động được thực hiện cho bạn).
Tôi đã thử điều này và nó hoạt động:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));