Sziasztok!
Swing alkalmazást fejlesztek saját CSS stylinggal (a projekt még pre-javaFX kezdetű), és normál JDialogokat is használunk.
Az megrendelő igénye, hogy mint a mesében, a dialógusok modálisak is legyenek meg ne is, azaz semmihez ne lehessen a dialóguson kívül nyúlni, kivéve néhány gombot.
Ezért a következő megoldást alkalmazom:
- Minden JDialógus nem-modális, legfeljebb kvázi-modális (ebből mindig csak 1 van fent, és az always on top)
- a dialóguson kívüli hozzáféréshez csináltam egy háttér full screen dialógust, semitransparent háttérrel, amin átlátszanaka szükséges gombok, minden mást takar a háttér, és az egéreseményeket is elkapkodja, kivéve a gombokat, amelyek továbbra is elérhetőek.
- A háttérdialógus sosem fókuszálódik, vagy aktiválódik, erre egy VetoableChangeListenert használok.
Minden jól működik, kivéve, hogy egyszer csak történik valami, és onnantól furcsa módon kezdenek azt ablakok kinézni. Úgy tűnik, mintha a háttérdialógust a kvázi-modális fölé rajzolnánk, de semmi fókusz vagy aktív ablak váltás nem történik erre a háttérdialógusra. már a repainteket is debuggoltam, és semmi.
A legfurcsább, hogy ha odahúzok egy másik alkalmazásablakot, az az átfedésnél már helyes Z-ordert mutat, mindenhol máshol rossz.
Ez így bonyolult, ezért inkább egy kép itt: http://lost.lost.hu/javascreen.png
Próbáltam jvm updatet, de már ez se segít. Valakinek van valami ötlete, hogy mit nézzek, merre keressem a problémát?
Igazából a képen látható jelenség az, amit egyáltalán nem értek, tehát azt sem, valójában mit is látok...
Köszönöm
- 5283 megtekintés
Hozzászólások
Nem lenne egyszerűbb az adott dialog-nak egy listát megadni az engedélyezett gombokkal és többit enabled(false)-ra állítani?
- A hozzászóláshoz be kell jelentkezni
A gombok a parent frame-en vannak, nem ezen a dialogon. Ha modal lenne a dialog, semmit nem érnél el a dialogon kívül. Ezért nem modális, viszont a hozzáférést minden máshoz korlátozni kell, ezért kell a háttér dialogus, ami full screen és elkapja az egéreseményeket, kivéve a fontos gombok elött
- A hozzászóláshoz be kell jelentkezni
Nem lenne egyszerűbb az adott dialog-nak egy listát megadni a parent frame-en levő engedélyezett gombokkal és többit enabled(false)-ra állítani, amikor megnyitod a dialogot? :)
- A hozzászóláshoz be kell jelentkezni