เป็นไปได้หรือไม่ที่จะเปลี่ยนไอคอนแอปพลิเคชันด้วย JavaFX หรือต้องใช้ Swing หรือไม่
เป็นไปได้หรือไม่ที่จะเปลี่ยนไอคอนแอปพลิเคชันด้วย JavaFX หรือต้องใช้ Swing หรือไม่
คำตอบ:
สมมติว่าสเตจของคุณเป็น "สเตจ" และไฟล์อยู่ในระบบไฟล์:
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 อยู่ในโฟลเดอร์เดียวกับไฟล์ต้นฉบับ
โปรแกรมเต็มรูปแบบสำหรับ starters :) โปรแกรมนี้ตั้งค่าไอคอนสำหรับ 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);
}
}
เอาท์พุท Screnshot
อัปเดตสำหรับ 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 images? กว่าที่คุณจะต้องเขียน:
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 (). เพิ่ม (รูปภาพใหม่ ("เส้นทางภาพ"));
stage.getIcons().add(new Image("/images/logo_only.png"));
มันเป็นนิสัยที่ดีที่จะสร้างโฟลเดอร์รูปภาพในโฟลเดอร์ src ของคุณและรับรูปภาพจากมัน
ฉันใช้สิ่งนี้ในแอปพลิเคชันของฉัน
Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);
หน้าต่างที่นี่คือเวที
หากคุณเรียกใช้ไฟล์ jar รหัสที่ระบุโดย Michael Berry จะเปลี่ยนไอคอนในแถบชื่อเรื่องและในทาสก์บาร์ ไอคอนทางลัดไม่สามารถเปลี่ยนแปลงได้
หากคุณรันโปรแกรมเนทีฟที่คอมไพล์ด้วย 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 () ลบ (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")));
}
}
หากคุณ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 สิ่งนี้ควรทำโดยอัตโนมัติสำหรับคุณ)
ฉันลองสิ่งนี้และใช้งานได้:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));