Eigenes Icon



  • Hallo ihr!

    Wie krieg ich ein eigenes Icon in die Titelleiste meines Programms?
    Hab da schon so nen Beitrag von 2005 gelesen, der hilft mir aber
    nicht wirklich weiter. Welche Methoden gibts denn da dafür?



  • Hallo,

    das geht über:

    public void setIconImage(Image image);
    

    Diese Methode hat sowohl JFrame, JWindow wie auch JDialog.
    Diese habe es direkt oder indirekt von java.awt.Window geerbt.

    OT: solche Sachen sieht man sofort auf den ersten Blick in der Javadoc.
    Kannst Du dammit umgehen?



  • Eigentlich schon, aber gesehen hab ichs nicht.
    Hab gesucht wie ein blöder....
    Aber Danke! 😉



  • Hier noch ein Tip:
    Auch wenn man Bilder und andere Ressourcen oft direkt als Pfad angeben kann, so ist es sicherer diese als Ressource zu laden. Das hat auch den Vorteil, wenn Du dein Programm schön als (per Doppelklick) ausführbare Jar-Datei ausliefern möchtest. Dort sind alle Ressourcen meistens in die Jar mit reingepackt.

    Beispiel:

    //Irgendwo wo Du das Icon laden möchtest
    URL imageURL = getClass.getRessource("foo.ico");
    ImageIcon icon = new ImageIcon(imageURL);
    setIconImage(icon);
    

    Gruß



  • Sorry, aber wie soll das funktionieren?

    setIconImage(icon);
    

    kann man nur Typen vom Typ Image übergeben bekommen.
    Icon ist aber vom Typ ImageIcon.

    Und überhaupt krieg ich Fehlermeldungen, wenn ich das so übernehme, wie du es hier gepostet hast.

    ⚠ getClass cannot be resolved
    ⚠ icon cannot be resolved to a type
    ⚠ Return type for the method setIconImage is missing

    Obwohl ich alle benötigten Packages importiert habe.



  • Wie war das mit dem Umgang mit der JavaDoc?
    getClass() ist eine Methode.



  • So hat er's aber nicht gepostet.... 🙄



  • Und was hält dich davon ab, Nachforschungen anzustellen und es dementsprechend zu korrigieren?



  • Tu ich ja, nur mit meinen stetigen Versuchen, es so hinzukriegen,
    dass Eclipse nicht meckert komm ich auf keinen grünen Zweig.
    Ich kann doch auch nix dafür, bin halt noch Anfänger.
    Ich hab Java erst letztes Jahr im Oktober gelernt bzw. damit angefangen.
    Und wenn mir hier jemand was reinpostet, gehe ich davon aus, dass derjenige
    weiß, was er da schreibt und nich irgendwas halbes oder falsches...





  • Ihr seid mir eine große Hilfe....
    Schickt mir Links, wo ich mir alles selber zusammensuchen kann...
    Hab von objektorientierter Programmierung eh schon keine Ahnung.

    Ich kapier nicht, wie ich den ganzen Sch*** zusammensetzen soll!!!
    Es funktioniert nichts!



  • Vlt. nimmst du dir mal fünf Minuten und schaust dir das Beispiel von linu(x)bie an und guckst, was Dasd und ich gepostet haben, dann sollte es wunderbar funktionieren.

    PS: Ich dachte, du kannst eigentlich mit der JavaDoc umgehen 😕



  • Ich hab da schon ein ganzes bisschen mehr als 5 Minuten investiert, glaub mir.
    Und nix geht.
    Das kann doch nich sein, dass ich das nicht auf die Reihe krieg.
    Irgendwo is doch da der Wurm drin, was linu(x)bie gepostet hat.
    Ich krieg noch die Krise.....

    P.S.: Ja, hab ich auch gedacht.....



  • Schade, dass du die Krise bekommst.

    setImageIcon() ist eine Methode von Frame. getImage() ist eine Methode von ImageIcon und getClass sollte getClass() heißen. Wenn du das umänderst, soollte es funktionieren.



  • OK LeGaN.

    Jetz hab ichs so:

    URL imageURL = getClass().[u]getRessource[/u]("icon.ico");
    ImageIcon icon = new ImageIcon(imageURL)[u];[/u]
    this.setIconImage(icon);
    

    Nur hab ich immer noch 2 Fehler bei den beiden unterstrichenen Teilen.

    ⚠ The method getRessource(String) is undefined for the type Class<capture#1-of ? extends Text21337_v0_5>
    // Text21337_v0_5 = Klassenname
    ⚠ Syntax error on token ";", { expected after this token

    Was passt da wieder nicht? 😡



  • Hallo Woolve,

    nimm es uns nicht böse, dass wir so stark auf der JavaDoc rumhampeln. Der Grund hierfür ist der, dass der Umgang mit der Dokumentation essentiel ist. Wenn Du Dich erst einmal dammit auseinander gesetzt hast, bist Du in der Lage sehr effektiv zu programmieren und das zu finden, was Du suchst.

    Du bist natürlich wilkommen, weiter fragen zu stellen. Dazu ist das Forum ja da 🙂

    Tut mir leid für den Fehler. Die getClass() ist eine Methode, die Du auf jedem beliebiegen Objekt aufrufen kannst. Zu jeder Klasse, wird genau eine Instanz (ein Objekt) gehalten, welches für Alle Objekte dieser (gegebenen) Klasse steht. Wozu das gebraucht wird? ➡ Das ist ein anderes Thema.

    ImageIcon ist eine Ableitung bzw Spezialisierung von Icon. Das heißt, überall wo nach Icon gefragt wird, kannst Du auch ImageIcon einsetzen. Das nennt sich Polymorphie.
    In der JavaDoc merkst Du das in der "spezielen" Klasse (hier ImageIcon), an dem kleinen Baum oben der in "Ascii-Art" gezeichnet wurde bzw an "All Implemented Interfaces" wenn es sich um Interfaces handelt. In der Benutzung ,im Kontext der Polymorphie, ist das egal ob Klasse oder Interface.
    In der "generellen" Klasse (hier Icon) findest Du alle abgeleiteten/implementierenden Klassen in der Rubrik: "All Known Implementing Classes"

    Mein Beispielcode (bis auf den Fehler) geht davon aus, dass Er in einer Ableitung von JFrame geschrieben wurde, dh

    class MyFrame extends JFrame
    {
    public MyFrame() {
    super();
    //hier zb kommt der Beispielcode
    }
     // weiterer Code
    }
    

    In diesem Fall wird getClass() und setImageIcon() auf MyFrame aufgerufen.
    Sofern Du allerdins nicht ableitest, dann sieht es eher wie folgt aus:

    //...
    JFrame f = new JFrame("MyFrame");
    URL imageURL = f.getClass().getRessource("foo.ico");
    ImageIcon icon = new ImageIcon(imageURL);
    f.setIconImage(icon);
    f.setVisible(true);
    //...
    

    Das ganze natürlich vergleichbar mit AWT sofern Du es SWING vorziehst (Ich empfehle jedoch Swing zu nutzen, das ist aber ein anderes Thema).

    Ich hoffe Ich konnte Dir helfen.
    Sofern noch Fragen offen sind, nur zu, frage!

    Gruß

    PS: Fehler vorbehalten, da aus dem Kopf geschrieben



  • Klasse linu(x)bie!

    Endlich mal eine (mehr oder weniger) komplette Antwort ^^.
    (nur Spaß, haha) 😃

    Kann ich (in dem Fall deines Beispiels) statt "f.setIconImage(icon);" auch "this.setIconImage(icon);" schreiben?

    Ich verwende (noch) kein Swing, wollte erst mal mit awt klarkommen.

    Hilft es was, wenn ich meinen Code poste? Natürlich nich komplett, nur das, was hier von Bedeutung ist?



  • Frame.setIconImage() will aber ein Image, kein Icon.

    JFrame f = new JFrame("MyFrame");
    URL imageURL = f.getClass().getResource("foo.ico");
    ImageIcon icon = new ImageIcon(imageURL);
    f.setIconImage(icon.getImage());
    f.setVisible(true);
    


  • LeGaN schrieb:

    Frame.setIconImage() will aber ein Image, kein Icon.

    Hehe... habe es soeben auch gemerkt.
    peinlich, peinlich 🤡 🤡



  • Kann ja mal passieren. Was mir auch grad aufgefallen ist, getRessource sollte mit einem s geschrieben werden, sonst gibts diese komische Fehlermeldung, die Woolve gepostet hat 🤡


Anmelden zum Antworten