# Aussehen von JFrame bzw JInternalFrame ändern... wie?



## Tiakaniz (12. Mai 2009)

Hallo,

Reicht es wenn ich von JFrame bzw JInternalFrame erbe und dann die drawComponent()-Methode überschreibe wenn das geht oder muss ich eine neue Componente schreiben damit ich das Aussehen ändern kann? Oder gibt es vielleicht noch eine einfacherere Lösung? 

Danke im voraus.


----------



## Dragonfire (12. Mai 2009)

Was genau willst du denn ändern?

Hintergrundsfarbe?
Rahmen?
Titelleiste?

Ein Beispiel wäre schön


----------



## Tiakaniz (12. Mai 2009)

Eigener Rahmen,eigene Titelleiste und eigene Buttons für schliessen, maximieren minimieren. Also im Prinzip alles .


----------



## Dragonfire (12. Mai 2009)

Alles ist ein bisschen übertrieben,
dass wäre ein komplett neues Aussehen jeder Swing-Klasse
und das sieht dann nach einem eigenen Style (LookAndFeel) aus.

Wenn du nur Rahmen und Schließen Buttons haben möchte,
dann würde ich das selbst nachbauen.

Frame auf setUndecorated(true) setzten
und dann z.B. selbst eine eigene Schließen Grafik mit einem
Listener oben rechts platzieren.
Rahmen auch einfach am Rand selbst platzieren.

Mal sehen was die Experten dazu sagen 

PS.: Alle Funktionen wie minimieren, maximieren und schließen dürfte die API bereitstellen.


----------



## Wildcard (12. Mai 2009)

Du kannst die BasicInternalFrameUI überschreiben und anpassen


----------



## Tiakaniz (12. Mai 2009)

naja den rahmen einfach am Rand setzen sieht glaub ich nicht gut aus wenn ich mit JInternalFrames in einem Frame arbeite weil dort bestimmt noch etwas neben dem Rand sehen würde (habs aber nicht getestet). Die nächste Frage wo du es schon ansprichst wäre dann ob dann halt möglich ist ein eigenes Look & Feel zu schreiben? Oder habt ihr noch mehr Ideen?


----------



## Wildcard (12. Mai 2009)

Tiakaniz hat gesagt.:


> Die nächste Frage wo du es schon ansprichst wäre dann ob dann halt möglich ist ein eigenes Look & Feel zu schreiben? Oder habt ihr noch mehr Idden?


Möglich ja, praktikabel nein. Da wärst du einige Monate beschäftigt.
Was spricht gegen meinen Vorschlag (ausser das es nicht ganz im Sinne der Swing Erfinder ist?)


----------



## Tiakaniz (12. Mai 2009)

Dein Vorschlag ist in soweit sehr gut und ich bin schon dabei das zu testen aber meine Vermutung ist dass es mit den Rändern nicht funktionieren wird und dass wenn ich undecorated setze und ich die neuen Ränder versuche ganz aussen zu zeichen sehe ich dennoch mindestens dünne weisse Linien aussen welche dann doch sehr unschön wären. Zudem interessiert mich ja auch (wie in einem anderen Thread schon erwähnt) eine Skalierungs-Animation wenn ich maximiere bzw minimiere usw... ich werde es erstmal testen. Wobei meine naheliegendste Lösung halt wäre alle Componenten die ich brauche selbst zu implementieren um das zu lösen was ich will. Aber ich will natürlich auch noch mehr Ideen hören damit ich abwägen kann welche für mich persönlich die beste Lösung wäre. Also falls dir noch etwas einfällt, ich teste auf jeden Fall sogut wie alle Ideen.


----------



## Wildcard (12. Mai 2009)

Gleich vorweg, mit JFrame funktioniert es nicht, aber JInternalFrame ist lightweight, daher lässt sich dort sehr viel anpassen.
Und zu deinen Animationen, warum nimmst du nicht einfach ein Betriebssystem das so etwas unterstüzt, denn auf Applikationsebene ist es sinnfrei. MacOS und Linux bieten dir doch derartigen optic sugar,


----------



## Tiakaniz (12. Mai 2009)

Das stimmt ... das habe ich nicht bedacht... aber für meine Zwecke reichen auch diese Anpassungen für die JInternalFrames. Und dann habe ich nochmal eine Frage am Rande: Wenn ich das JFrame im FSEM laufen lasse dann zeigt er mir sogar bei undecorated noch leichte Spuren vom Rand bzw der Leiste oben an... elso es ist etwas dunkler als das Weiss im Inneren. Aber warum?


----------



## Tiakaniz (12. Mai 2009)

Ja aber eben Windows nicht . Wenn das Programm nur für mich wäre und nicht auch meine Freunde (die Windows haben  ) dann wäre das kein Problem. Und ich habe schon eine relativ gute Lösung für das Problem gefunden so dass es auf allen Plattformen läuft.


----------



## Wildcard (12. Mai 2009)

FSEM?


----------



## Dragonfire (12. Mai 2009)

Nur mal so eine Frage zu den Animationen;
Wird das bei Java nicht kompliziert.

Wenn man zum Beispiel so einen Vergrößerungseffekt haben will,
dann müsste man ja einen durchsichtigen Frame haben
und dessen Größe dann ändern, oder?

PS.: 
Wann siehst du beim JFrame den weiße Lienen?
Beim Bewegen? (geht das überhaupt?)
Ich hab ein Undecorated JFrame als Startbild (Ladebild)
und da sind keine weißen Lienen...


----------



## Tiakaniz (12. Mai 2009)

Full Screen Exclusive Mode... also eigentlich Vollbild ohne irgendwelche Rahmen oder so. Wie in Spielen ( aber keine Angst ich mach kein Spiel ). Ich bau halt in einem JFrame eine recht flexible eigene GUI welche aber nur die Vorarbeit ist für ein späteres Programm (oder auch mehrere). Und deswegen auch der Effekt und das absolut andere Aussehen für die JInternalFrames .


----------



## Wildcard (12. Mai 2009)

Dann hast du zB einen Rand weil dein Layout Manager margins definiert oder du irgendwo eine Border hast, oder ähnliches.


----------



## Tiakaniz (12. Mai 2009)

Ich vermute die weissen Linien sind im FSEM dann sichtbar aber ich teste noch. 

Zu der Animation: nein ich habe mir das so gedacht dass ich den IFrame in bestimmten Zeitabständen einfach vergrößere um einen bestimmten Wert bis er maximiert ist.


----------



## Wildcard (12. Mai 2009)

> Nur mal so eine Frage zu den Animationen;
> Wird das bei Java nicht kompliziert.


Nicht komplizierter als bei anderen Sprachen. Ist letzlich kein Java Problem, sondern eine Frage des verwendeten Toolkits und wie einfach sich so etwas mit diesem Toolkit (und dessen erweiterungen, wie etwa JavaFX für das Swing Toolkit) realisieren lässt.



> Wenn man zum Beispiel so einen Vergrößerungseffekt haben will,
> dann müsste man ja einen durchsichtigen Frame haben
> und dessen Größe dann ändern, oder?


Was spricht denn dagegen einen durchsichtigen Frame zu haben?


----------



## Tiakaniz (12. Mai 2009)

Ok Danke Wildcard. Daran habe ich absolut nicht gedacht. Ich werde das ma überprüfen ob man da irgendwas im Layout einstellen kann!


----------



## Dragonfire (12. Mai 2009)

Wofür ist die setUndecorated(true) Methode denn gut,
wenn noch Margins und Border existieren?
(außer das die Titelleiste und die auffällige Umrandung weg ist)


----------



## Wildcard (12. Mai 2009)

Dragonfire hat gesagt.:


> Wofür ist die setUndecorated(true) Methode denn gut,
> wenn noch Margins und Border existieren?


Was soll das entfernen der Frame Decorations mit der internen Logik eines generellen LayoutManagers zu tun haben?


----------



## Tiakaniz (12. Mai 2009)

Ja ich hoffe es geht. Aber jetzt habe ich noch das Problem das ich halt das JInternalFrame nicht einfach undecorated setzen kann. Muss ich das irgendwie über die Panes machen?


----------



## Wildcard (12. Mai 2009)

Ich sagte doch das ein JInternalFrame lightweight ist. Eine einfache Komposition von JComponents, das kannst du manipulieren wie du lustig bist.


----------



## Wildcard (12. Mai 2009)

Hier zB ein JInternalFrame mit Farbverlauf in der Titlebar:
http://www.java-forum.org/awt-swing-swt/46663-realisierung-gradient-der-titlebar-jinternalframe.html


----------



## Tiakaniz (12. Mai 2009)

Danke schön!


----------

