PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei einem JDesktopIcon die Textfarbe setzen?


Senior Sanchez
2005-03-14, 23:25:03
Hi,

ich spiele gerade mit der klasse JDesktopIcon rum, nur dummerweise scheint da die Methode setForeground() nicht zu funktionieren, dass heißt, die Schriftfarbe ändert sich nicht.

Hat da jemand ne Idee woran das liegen könnte bzw. was man dagegen tun kann?

thx Senior Sanchez

Aqualon
2005-03-14, 23:57:49
Bei deinem Problem kann ich dir lieder nicht weiterhelfen, aber laut Sun sollte man diese Klasse nicht mehr verwenden:

This API should NOT BE USED by Swing applications, as it will go away in future versions of Swing as its functionality is moved into JInternalFrame.
Quelle: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JInternalFrame.JDesktopIcon.html

Aqua

Senior Sanchez
2005-03-15, 00:15:11
Übers JInternalFrame habe ich es auch versucht (JDesktopIcon ist ja ne inner-class vom JInternalFrame), aber das funktioniert einfach nicht.


mfg Senior Sanchez

HellHorse
2005-03-15, 00:36:39
Eine Idee habe ich schon
This component represents an iconified version of a JInternalFrame. This API should NOT BE USED by Swing applications, as it will go away in future versions of Swing as its functionality is moved into JInternalFrame. This class is public only so that UI objects can display a desktop icon. If an application wants to display a desktop icon, it should create a JInternalFrame instance and iconify it.
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JInternalFrame.JDesktopIcon.html

edit:
schiese zu spät

Allerdings sind solche Sachen Aufgabe des UI-Delegate. Von daher habe ich es auf die Schnelle auch nicht geschafft die Titelfarbe eines einzelnen JInternalFrame zu ändern.

Falls du das Metal LAF oder ein sonstiges themebares LAF verwendest ist wohl der einfachste und sauberste Weg ein eigenes Theme zu machen und dort die entsprechenden Farben zu ändern.

Schau dir am bestem mal die Metalworks Demo an.
Im JDK Verzeichnis unter:
demo/jfc/Metalworks
dort kannst du mal mit
src/resources/MyTheme.theme
spielen.

Senior Sanchez
2005-03-15, 00:51:38
Ich ahne schlimmes...... ich habe mal mit den Standard L&Fs rumgespielt und jedes mal wenn ich dort ein JInternalFrame minimiere, wird das als son kästchen angezeigt, wo das icon sichtbar ist und der titel... Ich nutzer allerdings die Library SkinLF und wenn ich dort minimiere sieht das ganze dann aus wie auf dem Windows-Desktop: Nen Text und darüber das Icon.

Irgendwelche Ideen?

mfg Senior Sanchez

Senior Sanchez
2005-03-15, 13:34:46
Ich habe das Problem gelöst *juhu* war ne gemeine Geschichte:
Ich benutze die SkinLF library damit ich mehr L&Fs anbieten kann. Die SkinLF Library implementiert dabei eine Klasse die sich SkinDesktopIconUI nennt. Da ich keine Sourcen zur Verfügung habe, habe ich die Klasse dekompiliert und mir die entsprechende Implementierung angeschaut:
Ein java.awt.Container bettet dabei ein JLabel mit Icon ein, bloß sowas weiß man ja vorher nicht. Also lasse ich mir jetzt bei jedem Aufruf vom JInternalFrame das DesktopIcon geben, caste es auf java.awt.Container, lasse mir das Array zurückgeben mit den enthaltenen Komponenten, greife mir dabei die allererste Komponenten, caste sie wieder auf JLabel und setze dann die Vordergrundfarbe et voila, es geht!


((JLabel)((Container)frame.getDesktopIcon()).getComponents()[0]).setForeground(java.awt.Color.WHITE);


mfg Senior Sanchez

HellHorse
2005-03-15, 19:36:34
((JLabel)((Container)frame.getDesktopIcon()).getComponents()[0]).setForeground(java.awt.Color.WHITE);

Welche Programmiersprache ist das? LISP? X-D
(nicht böse gemeint)

Senior Sanchez
2005-03-15, 20:42:36
Hehe, nee, worauf soll das anspielen? *g*
auf die extreme schachtelung? *g*


mfg Senior Sanchez

Trap
2005-03-15, 20:49:22
Lisp sähe so aus:
(set-foreground (aref (get-components (get-desktop-icon frame)) 0) +white+)

Kürzer und IMHO lesbarer.