JavaFX Uygulama Simgesi


172

Uygulama simgesini JavaFX kullanarak değiştirmek mümkün müdür veya Swing kullanılarak yapılması gerekiyor mu?

Yanıtlar:


234

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")));

5
Ayrıca, simge bir uygulama kısayolu olarak yüklenecekse ve dağıtım teknolojisi olarak WebStart kullanıyorsanız
javaws

9
Farklı boyutlarda birden fazla görüntü ekleyebilirsiniz ve JavaFX en uygun olanı seçer. Çünkü görev çubuğunda farklı boyutlara ve başlık çubuğunda farklı boyutlara sahipsiniz.
Ocak'ta drzymala

11
Bence bu sadece dosya dosya sistemindeyken işe yarıyor, ikonun jar dosyasının içine ve sınıf yoluna sarıldığı daha yaygın bir durum için, bu benim için çalışmıyor. stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));Çalışmaları kullanan diğer çözümlerden biri .
k_o_

3
En azından Ubuntu'da (Unity) simgenin yalnızca pencere dekorasyonu için kullanıldığını, ancak başlatıcı için kullanılmadığını lütfen unutmayın. Simgenin görünür olması için (çirkin soru işareti yerine), uygun .dektopdosyayı belirtmeniz gerekir . Açıklamamı burada
dzim

1
bu yalnızca başlık çubuğundaki simgeyi, yani pencerenin sol üst tarafını değiştirir. kısayol olarak masaüstündeyken uygulama simgesini nasıl değiştirebilirim? ve görev çubuğunda?
TejpalBh

74

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.


3
'<sınıfınız> .class' yerine 'getClass ()' kullanılabilir
Jim Fred

71

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 Ekran Görüntüsü

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"));

resim açıklamasını buraya girin

Umarım yardımcı olur. Teşekkürler!!


Bu svg'yi destekliyor mu?
qed

1
@qed, SVG'nin desteklendiğini düşünmüyorum, ancak% 100 emin değilim. Test edebilirsiniz.
Madan Sapkota

JavaFX uygulama simgesi için bir .svg dosyası kullanmayı denedim. İşe yaramadı. Hata verilmedi, ancak JavaFX özel logom yerine varsayılan logosunu kullandı.
Simon Diemert

8

fxml içine ekleyebilirsiniz. Evre seviyesi

<icons>
    <Image url="@../../../my_icon.png"/>
</icons>

7

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")));

2
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


2

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).


Java paketlerinize kaynak yerleştirmek iyi bir uygulama değildir. Bunları resourcesklasörünüze yerleştirmeniz önerilir .
Thibstars

1
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));

Bu yöntemi kullanarak farklı boyutlarda birden fazla simge ekleyebilirsiniz.Görüntüler aynı görüntünün farklı boyutları olmalı ve en iyi boyut seçilecektir. eg. 16x16, 32,32


1
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));

images klasörünün Kaynak klasöründe olması gerekir.


4
Bu cevap tamamen gereksizdir çünkü başka bir cevap zaten aynı şeyi açıklamıştır.
L. Guthardt

1

Bu kod satırını kullanarak uygulamanıza kolayca simge koyabilirsiniz

stage.getIcons (). add (new Image ("image path"));


0
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.


Bu cevap tamamen gereksizdir çünkü başka bir cevap zaten aynı şeyi açıklamıştır.
L. Guthardt

0

Bunu başvurumda kullandım

Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);

İşte pencere sahne.


0

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.


0

Ç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")));
    }
}

-1

Eğer var ise Invalid URL or resource not foundsizin çalışma alanında "bin" klasöründe icon.png koydu.


-2

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.


40
yukarıda yayınlanan şey tam olarak bu değil mi?
XXL

-2

Bunu denedim ve işe yarıyor:

stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));

aslında, .. hayır: noktalar kaynak aramasında desteklenmiyor, lütfen api
doc'i
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.