Portál AbcLinuxu, 13. května 2025 23:32
Dobrý den, potřebuji ve své aplikaci nastavit oddělání dekorací komponenty JFrame po stisku tlačítka. Toho jsem chtěl dosáhnout tímto kódem:
setUndecorated(true);
Pokud tento řádek použiji v konstruktoru, vše je v pořádku a zobrazené okno je bez dekorací. Pokud ho použiji v obsluze stisku tlačítka, dostanu chybu
java.awt.IllegalComponentStateException: The frame is displayable.
V dokumentaci píší: Disables or enables decorations for this frame. This method can only be called while the frame is not displayable. Jak ale poznám, kdy je a kdy není frame displayable?
isDisplayable()
. V dokumentaci té metody se zároveň dozvíte, co to znamená.
Tu dokumentaci jsem cetl, ale stale mi z toho neni jasne jak dosahnout oddelani dekoraci u jiz zobrazeneho JFramu.
A component is made undisplayable either when it is removed from a displayable containment hierarchy or when its containment hierarchy is made undisplayable. A containment hierarchy is made undisplayable when its ancestor window is disposed.Tzn. u vnořených komponent musíte komponentu vyjmout, top-level komponenta se nastaví do stavu undisplayable voláním metody
dispose()
.
No jo, jenze ja chci odstranit dekorace u komponenty JFrame, ktera stoji v hierarchii nejvyse. Kdyz v ni zavolam metodu dispose() tak se frame zavre. Jak to tedy vyresit?
Jak to tedy vyresit?Přesně tak, jak je to napsané v dokumentaci. Zavolat
dispose()
, čímž se odstraní všechny asociované zdroje (okna apod.), a zůstane pouze abstraktní reprezentace formuláře v paměti. Následně pak zavolat pack()
nebo setVisible(true)
pro opětovné přeložení abstraktní reprezentace do GUI prvků.
Jinak dokumentace runtime knihovny Javy je volně dostupná třeba na http://java.sun.com/javase/6/docs/api/, stačí si ji přečíst. Zatím se pořád ptáte na věci, které jsou napsané přímo v dokumentaci metody, na kterou se ptáte.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.