Yanıtlar:
Sahne alanınızın "sahne" olduğunu ve dosyanın dosya sisteminde olduğunu varsayarsak:
stage.getIcons().add(new Image("file:icon.png"));
Aşağıdaki yoruma göre, içeren bir kavanoza sarılmışsa bunun yerine aşağıdaki yaklaşımı kullanmanız gerekir:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
Çalışmaları kullanan diğer çözümlerden biri .
Bunu denedim ve tamamen işe yarıyor. Kod:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png kaynak dosyalarıyla aynı klasörün altındadır.
Yeni başlayanlar için tam program :) Bu program StackOverflowIcon için simge ayarlar.
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);
}
}
Çıkış Screnshot
JavaFX 8 için güncellendi
Kodu değiştirmenize gerek yok. Hala iyi çalışıyor. Java 1.8 (1.8.0_45) 'de test edilmiş ve doğrulanmıştır. Yol yerel veya uzak olarak ayarlanabilir her ikisi de desteklenir.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
VEYA
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Umarım yardımcı olur. Teşekkürler!!
fxml içine ekleyebilirsiniz. Evre seviyesi
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Bir görüntü klasörünüz varsa ve bu simge kullanılırsa
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
ve doğrudan iyi bir uygulama olmayan paketinizden kullanıyorsanız bunu kullanın
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
ve bir klasör yapınız varsa ve içinde bu simge içinde
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
İcon.png dosyanız kaynak dizinindeyse ve önce '/' koymayı unutmayın, aksi takdirde çalışmaz
Src dizininizde image.icons gibi yeni bir paket oluşturmak ve orada .png resimlerinizi taşımak hakkında ne düşünüyorsunuz? Sadece yazmanız gerekenler:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Bu çözüm benim için mükemmel çalışıyor, ancak yine de doğru olup olmadığından emin değilim (burada yeni başlayanlar).
resources
klasörünüze yerleştirmeniz önerilir .
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
images klasörünün Kaynak klasöründe olması gerekir.
Bu kod satırını kullanarak uygulamanıza kolayca simge koyabilirsiniz
stage.getIcons (). add (new Image ("image path"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Src klasörünüzde resim klasörü oluşturmak ve ondan resim almak iyi bir alışkanlıktır.
Jar dosyasını çalıştırırsanız, Michael Berry tarafından belirtilen kod başlık çubuğundaki ve görev çubuğundaki simgeyi değiştirir. Kısayol simgesi değiştirilemez.
Com.zenjava ile derlenmiş yerel bir program çalıştırıyorsanız, program simgesine bir bağlantı eklemelisiniz:
<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>
Bu, kısayola ve görev çubuğuna bir simge ekleyecektir.
Çalışma zamanında simgeleri aç / kapat:
Buradaki yanıtlara ek olarak, uygulamanıza ilk kez bir Simge atadığınızda, yalnızca sahnenize yeni bir simge ekleyerek geçiş yapamayacağınızı buldum (bu, cihazınızın simgesini açık / kapalı etkin / devre dışı).
Çalışma süresi boyunca yeni bir simge ayarlamak için, yeni bir simge eklemeye çalışmadan önce getIcons (). Remove (0) işlevini kullanın; burada 0, geçersiz kılmak istediğiniz simgenin dizini aşağıdaki gibidir:
//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")));
Sahneye diğer yöntemlerden veya sınıflardan erişmek için ana sınıfınızdaki sahne alanı için yeni bir statik alan oluşturabilirsiniz, böylece uygulamanızın herhangi bir yerinden erişebileceğiniz statik bir yöntemle kapsülleyerek başlangıç () yönteminden erişebilirsiniz. .
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'teki başlık çubuğuna kendi simgenizi eklemenin bir başka kolay yolu, aşağıdaki yöntemi kullanarak resmi birincil aşamanıza eklemektir:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
İthalat javafx.scene.image.Image (netbeans gibi bir ide kullanıyorsanız, bu sizin için otomatik olarak yapılmalıdır) emin olun.
Bunu denedim ve işe yarıyor:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));