A Java nyelv Dialógus ablakok Elek Tibor
Dialógus ablakok
Szerepe: felbukkanó ablak (üzenet, input) Felépítése, használata majdnem ua., mint JFrame Tulajdonos: lehet tulajdonosa, amellyel együtt ikonizálódik, stb. Modalitás: Egy dialógus ablak lehet modális vagy nem modális. - Nem modális esetén: át lehet kapcsolni másik ablakra, a megjelenítés után a kód azonnal fut tovább.
Dialógus ablakok
Modalitás: - Modális esetén: az ablak bezárásáig nem lehet átkapcsolni másik ablakra (melyekre?), a megjelenítése (d.setVisible(true)) utáni utasítás csak akkor fut le, ha bezárták az ablakot. Az 1.6 óta a modalitásnak több fajtája van, amely meghatározza, hogy mely ablakokra nem lehet átkapcsolni.
Dialógus ablakok
Modalitás: DOCUMENT_MODAL: blokkolja az ugyanabban a dokumentumban levő top-level ablakokat. (Dokumentum: tulajdonos nélküli top-level) APPLICATION_MODAL: blokkolja az ugyanabban az alkalmazásban levő top-level ablakokat. TOOLKIT_MODAL: blokkolja az ugyanabban a toolkitben futtatott top-level ablakokat (pl. egy böngésző, több applet)
Dialógus ablakok
Modalitás: Beállítása: - kontruktor - setModalityType(Dialog.ModalityType) - setModal(true): elavult, APPLICATION_MODAL - setModal(false): elavult, MODELESS
Modalitás kivétel: Egy top-level ablakot meglehet jelölni, hogy ne blokkolhassa modális ablak. setModalExclusionType()
Dialógus ablakok
Kész dialógus ablakok: - JOptionPane - JColorChooser - JFileChooser
Saját dialógus ablak: - JDialog
Dialógus ablakok, JOptionPane
JOptionPane: - showMessageDialog(): üzenet (információ, figyelmeztetés, hiba, sima üzenet) megjelenítés - showConfirmDialog(): kérdés, válasz (pl. igen, nem) - showInputDialog(): egy szöveges adat bekérése - showOptionPane(): általános - showInternalMessageDialog(), showInternalConfirmDialog(), showInternalInputDialog(), showInternalOptionPane(): ua. belső ablakként
Dialógus ablakok, JOptionPane
Lehetséges paraméterei: - parent (Component): fontos az elhelyezkedés szempontjából (a szülő közepe), valamint modális viselkedés szempontjából. Többnyire egy frame kell legyen, de lehet null is. - message (Object): gyakran szöveg, de lehet más is pl. Icon - title (String): az ablak fejléc felirata - messageType (int): az üzenet típusa. Az üzenet mellett megjelenő ikon-t befolyásolja. Pl. JOptionPane.ERROR_MESSAGE - icon (Icon): a megjelenő icon
Dialógus ablakok, JOptionPane
Lehetséges paraméterek folytatás: - optionType (int): az ablakban levő gombokat adhatjuk meg ezzel. Pl. JOptionPane.YES_NO_OPTION - options (Object[]): az ablakban levő gombokat adhatjuk meg. - initial (Object): az alapértelmezett gomb megadás Visszatérési érték: - confirm esetén: int (definiált konstansok) - input esetén: String, null ha mégsem Példa
Dialógus ablakok, JOptionPane
JOptionPane: showMessageDialog(): JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "Inane warning", JOptionPane.WARNING_MESSAGE);
JOptionPane: showConfirmDialog(): int n = JOptionPane.showConfirmDialog( frame, "Would you like green eggs and ham?", "An Inane Question", JOptionPane.YES_NO_OPTION);
Dialógus ablakok, JOptionPane
JOptionPane: showInputDialog(): String s = (String)JOptionPane.showInputDialog( frame, "Complete the sentence:\n" + "\"Green eggs and...\"", "Customized Dialog", JOptionPane.PLAIN_MESSAGE, icon, null, null);
Dialógus ablakok, JColorChooser
Használat: - az alapértelmezett panelekkel, modális dialógusként (csak ezt nézzük meg) - a panelek lecserélésével - működés lecserélésével
Dialógus ablakok, JColorChooser
Paraméterek: - parent (Component): szülő komponens - title (String): ablak felirat - initial (Color): alapértelmezett szín
Példa: Color a = JColorChooser.showDialog(this, ”Válasszon háttérszint a gombnak!”, btnGomb.getBackground()); if (a != null) btnGomb.setBackground(a);
Dialógus ablakok, JFileChooser
Használat: - alapértelmezett beállításokkal (csak ezt nézzük) - egyéni file view, és egyéb egyéni beállítások (pl. gomb feliratok) Használat alapértelmezett beállításokkal: 1. Létrehozás: konstruktorral, paraméterként megadható a kezdő directory 2. File szűrő beállítás: FileNameExtensionFilter objektummal 3. Megjelenítés: showOpenDialog(), showSaveDialog() 4. Visszatérési érték: CANCEL_OPTION, APPROVE_OPTION 5. Kiválasztott lekérdezése: getSelectedFile(), getSelectedFiles()
Dialógus ablakok, JFileChooser
Példa: JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF", "jpg", "gif"); chooser.setFileFilter(filter); int returnVal = chooser.showOpenDialog(parent); if(returnVal == JFileChooser.APPROVE_OPTION) { File f = chooser.getSelectedFile(); }
Dialógus ablakok, JDialog
Szerep: Egyéni kialakítású saját dialógus ablak Feladatok - Kinézet kialakítása - Modalitás beállítása - Kiinduló adatok átadásának megoldása - Gondoskodni, hogy megkülönböztethessük a lehetséges bezárásokat. Pl. OK, Mégsem, stb. - Bezáráskor, csak láthatatlanná. Utána ha kell lekérdezni a dialógus ablakban kitöltött adatokat.
Dialógus ablakok, JDialog
Kiinduló adatok átadásának megoldása Kontruktor paraméterrel public SajatDialog(Adat indulo) {…}
Gondoskodni, hogy megkülönböztethessük a lehetséges bezárásokat. Pl. OK, Mégsem, stb. Megoldás 1: a) Készítünk egy enum-ot enum DialogResult { OK, MEGSEM } b) A dialógus ablakunkba készítünk egy adattagot a dialogresult tárolásához, valamint egy getter metódust
Dialógus ablakok, JDialog
Megoldás 1 folytatás: c) Minden bezárási lehetőségben értéket adunk az adattagunknak. Pl. az „OK” gomb esemény kezelőjében DialogResult.OK-t, a „Mégsem” gomb eseménykezelőjében DialogResult.MEGSEM-t. (Többi bezárási lehetőség !!!!) d) Az ablakot a leendő tulajdonosból példányosítom, megjelenítem, majd láthatatlanná válása után lekérdezem a DialogResult-t.
Dialógus ablakok, JDialog
Megoldás 2: a) Most is készítek ugyanolyan enum-ot b) Most is ugyan úgy használom az enum-t c) A dialogus ablakomnak csak private konstruktort készítek d) Készítek egy publikus statikus metódust (pl. showDialog néven), amelynek visszatérési értéke a DialogResult, paramétere a kiinduló adat(ok). Ebben a metódusban létrehoz egy példányt saját magából, megjeleníti saját magát, majd láthatatlanná válása után visszaadja a DialogResult-t.
Dialógus ablakok, JDialog
Lekérdezni a dialógus ablakban kitöltött adatokat. - Soha ne érjük el közvetlenül a grafikus komponenseket kívülről!! - Az „OK” gomb hatására a) Ellenőrizzük le a kitöltést, ha nem stimmel, akkor nem zárjuk be az ablakot b) Egy dialógus ablakon belüli private adattagba gyűjtsük össze a kitöltött adatokat c) Írjunk gettert ehhez a taghoz.
Példa
Gyakorlat
Készítsen egy teljes személy nyilvántartást (név, életkor, nős-e). A fő ablakban egy listában vagy egy táblázatban látszódjanak a személyek adatai. Legyen „új felvitel” gomb, amelynek hatására egy dialógus ablakban megadhatóak legyenek egy személy adatai. Legyen „módosítás” gomb, amellyel a kiválasztott személy adatait lehet módosítani, szintén a dialógus ablakban. Legyen „törlés” gomb. Legyen file menü, amelyben lehet elmenteni az adatokat bekért nevű file-ba, visszatölteni, kilépni. Legyen beállítások menü, amellyel pl. a gombok színét lehet beállítani.