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.

 

Kategória: Java

Látogatók

256134
Ma42
Tegnap98
Ezen a héten140
Ebben a hónapban873
Összesen256134
Statistik created: 2024-12-10T06:52:09+01:00
Bejelentkezett felhasználók 0
Regisztrált felhasználók 1
Ma regisztráltak 0