JFrame vagy JDialog?

    Előbb-utóbb minden kezdő fejlesztő szembekerül a problémával, amely a következő két tényből fakad.

    1. A JFrame nem használható modális párbeszédablakként
    2. 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.

     

    Tags: ,