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.