- Megjelent: 2012. július 08
Előbb-utóbb minden kezdő fejlesztő szembekerül a problémával, amely a következő két tényből fakad.
- A JFrame nem használható modális párbeszédablakként
- A JDialog-ot nem lehet átméretezni automatikusan teljes képernyőre
Okok
A JDialog hiányosságának oka számomra nem teljesen világos, a Java kézikönyv kifejti, hogy a JVM az aktuális operációs rendszer API-ját használja az ablakok megjelenítésére. A JDialog a szülő JFrame-hez kötődik, ezért a modalitás adott. Viszont ha két JFrame-et hozol létre, az operációs rendszer két független konténert biztosít, amelyek között nincs a JFrame és a JDialog közötti kapcsolathoz hasonló kötődés, ezért a JFrame-ek modalitása nem oldható meg korrekt és biztonságos módon (csak veszélyes trükkökkel).
Megoldás
A megoldás a következő:
- A párbeszédpaneleket JPanel-ből származtassad, így tetszőlegesen burkolhatók JDialog-ba vagy JFrame-be, a szükségtől függően.
- Ha modalitásra van szükséged, mindig JDialog-ot használdd. A JDialog teljes képernyőre méretezését a következő módon teheted meg:
setBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds());
- Ha nincs szükség modalitásra, mindig használj JFarme-et, amely rendelkezik az automatikus és kényelmes átméretezésekhez szükséges funkcionalitással.
Miért ne használj olcsó trükköket?
- Mert az olcsó trükkök később sokba kerülhetnek.
-
A Java API hackelése a következő mellékhatásokat okozhatja:
- A funkcionalitás nem lesz platformfüggetlen, mert különböző platformokhoz készült virtuális gépekben ugyanazok a funkciók másképp vannak implementálva
- A funkcionalitás időben nem lesz stabil. A Java keretrendszert rendszeresen, néhány évente újratervezik és újraírják, ezért nem garantált, hogy az API mélyebb rétegeinek tökéletlenségeit kihasználó kód a következő Java verzióval is ugyanúgy fog működni.