You are not logged in.

  • Login

1

Wednesday, February 25th 2009, 5:56pm

ImageIcon in JFrame ändern

Hiho

Ich beschäftige mich grad ein wenig mit swing und GUI und hab jetzt folgendes Problem:
Ich will das Icon eines JFrame ändern (falls das überhaupt geht). Der code wird auch angenommen und fehler treten auch nicht auf,
aber das Icopn bleibt immer das gleiche. Und ich hab festgestellt, dass auf nem anderen PC das Icon auf einmal ganz weg war. (beide Windows XP)

Hier mal der Code:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
Image img = Toolkit.getDefaultToolkit().getImage("icon.gif");
        MediaTracker mt = new MediaTracker(fenster);
 
        mt.addImage(img, 0);
        try{
            //Warten, bis das Image vollständig geladen ist,
            mt.waitForAll();
        }
        catch(InterruptedException e){
            //nothing
        }
        fenster.setIconImage(img);
    }


ps. das Bild ist 16 x 16 Pixel groß und liegt im Projektordner.

danke schon mal
mfg

2

Wednesday, February 25th 2009, 7:21pm

Ja... Das Neuzeichnen von Swing-Komponenten ist ein leidiges Thema.

dafür scheit es sogar einen Bug zu geben:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4480044

Das geht nicht:

Java Quellcode

1
2
frame.show();
frame.setIconImage( icon );


Das geht:

Java Quellcode

1
2
frame.setIconImage( icon );
frame.show();


Die Lösung soll das sein:

Java Quellcode

1
2
3
frame.hide();
frame.setIconImage( icon );
frame.show();

3

Wednesday, February 25th 2009, 7:33pm

also ich hab das jetzt mal getestet, aber das geht immer noch nicht :(
Muss ich da auf was besonderes achten, oder das in einer bestimmten Reihenfolge machen?

hier der code:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
img = Toolkit.getDefaultToolkit().getImage("icon.gif");
        MediaTracker mt = new MediaTracker(fenster);
 
        mt.addImage(img, 0);
        try{
            //Warten, bis das Image vollständig geladen ist,
            mt.waitForAll();
        }
        catch(InterruptedException e){
            //nothing
        }
        fenster.hide();
        fenster.setIconImage(img);
        fenster.show();
    }


mfg

4

Wednesday, February 25th 2009, 8:50pm

Das img ist aber da oder? Nicht null oder so.

5

Wednesday, February 25th 2009, 9:21pm

Doch das Image ist da, das wird sogar über den Inspector als Icon von dem JFrame angezeigt.
Nur sieht man das halt nicht. Muss man da vllt irgendwie die paint() Methode überlagern oder so?
Ich hab da nämlich schon alle möglichen Variationen ausprobiert. Also an verschiedenen Stellen geladen, nen normalen Frame genommen usw.

mfg

6

Wednesday, February 25th 2009, 10:06pm

Das Ding scheint arg verbuggt zu sein.
Anscheinend werden weder alle Untertypen von Image unterstützt noch alle Bildformate:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6339074
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098377

Was für eine Java-Version verwendest du?

Welcher konkrete Typ ist denn img? Image ist ja abstrakt. Gibt mal System.out.println(img.getClass().getName()) aus und sag mir auch mal welcher File-Typ dein Bild ist (PNG, GIF, ... ?).

7

Wednesday, February 25th 2009, 10:46pm

Das war ja wieder klar dass ich mir die Zähne an nem Bug ausbeiße :)

Also das Image ist eine 16 x 16 Pixel große .gif Datei. Ich habs auch shcon mit ner gleich großen .ico Datei probiert, kommt aber das gleiche raus.

Java-Version hab ich sowohl das jre als auch das jdk die neuste Versin drauf.

System.out.println liefert das hier:
sun.awt.image.ToolkitImage

Liegt das vllt daran, dass es ToolkitImage ist? Ich werd das morgen mal ohne dieses Toolkit versuchen.

mfg

8

Wednesday, February 25th 2009, 11:25pm

Lass dir mal mir getIconImage().getClass().getName() den Typ vom Default Icon Image geben. Wäre ja mal interessant. Ansonsten würde ich es mal mit ImageIcon versuchen.

9

Thursday, February 26th 2009, 1:52pm

Also das versteh ich jetzt nicht :(
Kannst du vllt mal code posten wie ich das da jetzt einbauen müsste?

mfg

10

Thursday, February 26th 2009, 6:16pm

So das Problem ist gelöst.
Ich hab mal ein wenig rumprobiert mit dem filename, und da muss man noch den Projektordner angeben.
Würd in meinem Fall so aussehen:

Java Quellcode

1
img = Toolkit.getDefaultToolkit().getImage("PingPong/icon.gif");


trotzdem danke für die Bemühungen ;)

mfg

11

Thursday, February 26th 2009, 7:17pm

Quoted

Das img ist aber da oder? Nicht null oder so.

:-D

12

Thursday, February 26th 2009, 8:55pm

hey der hat das beim inspector wirkich angezeigt (bei BlueJ) :)
nur stand da halt dann der pfad vom Bild, deswegen dacht ich das is da...
naja jetzt gehts ja :)

mfg

Similar threads

Social bookmarks