JavaFX एप्लिकेशन आइकन


172

क्या JavaFX का उपयोग करके एप्लिकेशन आइकन को बदलना संभव है, या क्या इसे स्विंग का उपयोग करके किया जाना चाहिए?

जवाबों:


234

मान लें कि आपका चरण "चरण" है और फ़ाइल फ़ाइल सिस्टम पर है:

stage.getIcons().add(new Image("file:icon.png"));

नीचे टिप्पणी के अनुसार, यदि यह एक जार में लिपटा है, तो आपको इसके बजाय निम्नलिखित दृष्टिकोण का उपयोग करने की आवश्यकता होगी:

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

5
इसके अतिरिक्त, यदि आइकन को एप्लिकेशन शॉर्टकट के रूप में स्थापित किया जाना है और आप वेबस्टार्ट को परिनियोजन तकनीक के रूप में उपयोग कर रहे हैं, तो आप अपनी jnlp फ़ाइल में उपयुक्त आइकन / शॉर्टकट / डेस्कटॉप सेटिंग्स सेट करना चाहते हैं: docs.oracle.com/javase/7 / डॉक्स / टेक्नोसेस / गाइड्स / जेव्स /…
ज्वेल्स

9
आप विभिन्न आकारों की कई छवियां जोड़ सकते हैं और JavaFX सबसे अच्छा फिट बैठता है। क्योंकि आपके पास टास्क बार में अलग आकार हैं और टाइटल बार में अलग।
द्रुमशाला 20

11
मुझे लगता है कि यह केवल तब काम करता है जब फ़ाइल फ़ाइल सिस्टम में होती है, अधिक सामान्य स्थिति के लिए जहां आइकन जार फ़ाइल के अंदर और क्लासपाथ में लपेटा जाता है, यह मेरे लिए काम नहीं कर रहा था। stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));कार्यों का उपयोग करते हुए अन्य समाधानों में से एक ।
k_o_

3
कृपया नहीं, कि कम से कम उबंटू (एकता) पर आइकन केवल खिड़की की सजावट के लिए उपयोग किया जाता है, लेकिन लॉन्चर के लिए नहीं। आइकन दिखाई देने के लिए (बदसूरत प्रश्न चिह्न के बजाय), आपको उपयुक्त .dektopफ़ाइल निर्दिष्ट करने की आवश्यकता होगी । मेरा विवरण यहाँ
dzim

1
यह शीर्षक पट्टी पर केवल आइकन बदलता है अर्थात विंडो पर ऊपर बाईं ओर। शॉर्टकट के रूप में डेस्कटॉप पर होने पर एप्लिकेशन का आइकन कैसे बदलें? और टास्कबार पर?
तेजपालभ

74

मैंने यह कोशिश की और यह पूरी तरह से काम करता है। कोड है:

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

icon.png स्रोत फ़ाइलों के समान फ़ोल्डर के अंतर्गत है।


3
'<yourclassname> .class' को 'getClass ()' से बदला जा सकता है
जिम फ्रेड

71

शुरुआत के लिए पूर्ण कार्यक्रम :) यह कार्यक्रम स्टैकऑवरफ्लोइकॉन के लिए आइकन सेट करता है।

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

आउटपुट स्क्रेंशॉट

JavaFX स्क्रीनशॉट

JavaFX 8 के लिए अपडेट किया गया

कोड बदलने की आवश्यकता नहीं है। यह अभी भी ठीक काम करता है। जावा 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"));

यहां छवि विवरण दर्ज करें

आशा करता हूँ की ये काम करेगा। धन्यवाद!!


क्या यह svg का समर्थन करता है?
qed

1
@qed, मुझे नहीं लगता कि एसवीजी समर्थित है, लेकिन मुझे 100% यकीन नहीं है। आप इसका परीक्षण कर सकते हैं।
मदन सपकोटा

मैंने अभी JavaFX एप्लिकेशन आइकन के लिए .svg फ़ाइल का उपयोग करने का प्रयास किया है। काम नहीं किया। कोई त्रुटि प्रदान नहीं की गई, लेकिन मेरे कस्टम एक के बजाय JavaFX ने अपने डिफ़ॉल्ट लोगो का उपयोग किया।
साइमन डायमर्ट

8

आप इसे fxml में जोड़ सकते हैं। स्टेज का स्तर

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

7

यदि आपके पास एक चित्र फ़ोल्डर है और आइकन उस उपयोग में सहेजा गया है

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

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

यदि आपका icon.png संसाधनों में है, तो पहले याद रखें कि '' / '' रखना है, अन्यथा यह काम नहीं करेगा


2

आप अपने src डायरेक्टरी में नया पैकेज यानी इमेज बनाने के बारे में क्या सोचते हैं? बस आपको लिखने की आवश्यकता है:

Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);

यह समाधान मेरे लिए पूरी तरह से काम करता है, लेकिन फिर भी मुझे यकीन नहीं है कि यह सही है (यहां शुरुआत)।


संसाधनों को अपने जावा संकुल में रखना अच्छा नहीं है। उन्हें अपने resourcesफ़ोल्डर में रखने की अनुशंसा की जाती है ।
थिबस्टार्स

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

आप इस पद्धति का उपयोग करके विभिन्न आकारों के साथ एक से अधिक आइकन जोड़ सकते हैं। छवियों को एक ही छवि के विभिन्न आकार होने चाहिए और सबसे अच्छा आकार चुना जाएगा। eg. 16x16, 32,32


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

इमेज फोल्डर को रिसोर्स फोल्डर में होना चाहिए।


4
यह उत्तर पूरी तरह से अनावश्यक है क्योंकि एक अन्य उत्तर पहले से ही समझाया गया है।
एल। गुटहार्ट

1

आप इस कोड लाइन का उपयोग करके आसानी से अपने आवेदन में आइकन डाल सकते हैं

stage.getIcons () जोड़ें (नई छवि ("छवि पथ"));


0
stage.getIcons().add(new Image("/images/logo_only.png"));

अपने src फोल्डर में इमेज फोल्डर बनाना और उससे इमेज प्राप्त करना अच्छी आदत है।


यह उत्तर पूरी तरह से अनावश्यक है क्योंकि एक अन्य उत्तर पहले से ही समझाया गया है।
एल। गुटहार्ट

0

मैंने अपने आवेदन में इसका इस्तेमाल किया

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

यहाँ विंडो स्टेज है।


0

यदि आप जार फ़ाइल चलाते हैं, तो माइकल बेरी द्वारा निर्दिष्ट कोड शीर्षक बार में और टास्कबार में आइकन बदल देगा। शॉर्टकट आइकन नहीं बदला जा सकता है।

यदि आप 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>

यह शॉर्टकट और टास्कबार के लिए एक आइकन जोड़ देगा।


0

रनटाइम में आइकन टॉगल करें:

यहाँ प्रतिक्रियाओं के अलावा, मैंने पाया कि एक बार आपने अपने एप्लिकेशन को एक आइकॉन को पहली बार असाइन किया है, तो आप इसे केवल अपने चरण में एक नया आइकन जोड़कर टॉगल नहीं कर सकते हैं (यह उपयोगी होगा यदि आपको अपने आइकॉन के आइकन को टॉगल करने की आवश्यकता है एप ऑन / ऑफ इनेबल / डिसेबल)।

रन टाइम के दौरान एक नया आइकन सेट करने के लिए एक नए आइकन को जोड़ने की कोशिश करने से पहले getIcons ()। Remove (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")));

अन्य तरीकों या कक्षाओं से चरण तक पहुँचने के लिए आप अपने मुख्य वर्ग में मंच के लिए एक नया स्थैतिक क्षेत्र बना सकते हैं, इसलिए इसे प्रारंभ से बाहर तक पहुँचा सकते हैं () विधि एक स्थिर विधि पर संलग्न करके जिसे आप अपने ऐप में कहीं से भी एक्सेस कर सकते हैं। ।

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

यदि आपको Invalid URL or resource not foundअपना कार्यक्षेत्र में "icon" फ़ोल्डर में अपना icon.png मिला है ।


-2

JavaFX में टाइटल बार पर अपना खुद का आइकन डालने का एक और आसान तरीका है, निम्न विधि का उपयोग करके अपने प्राथमिक चरण में इमेज को जोड़ना:

Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);

सुनिश्चित करें कि आपका आयात javafx.scene.image.Image (यदि netbeans की तरह एक विचारधारा का उपयोग करके यह स्वचालित रूप से आपके लिए किया जाना चाहिए)।


40
क्या यह ठीक नहीं है जो ऊपर पोस्ट किया गया है?
XXL

-2

मैंने यह कोशिश की और यह काम करता है:

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

वास्तव में, .. नहीं: डॉट्स संसाधन लुकअप में समर्थित नहीं हैं, कृपया एपीआई डॉक्टर
क्लेओपेट्रा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.