Java Programozs 3 Gy Java GUI Swing AWT

  • Slides: 35
Download presentation
Java Programozás 3. Gy: Java GUI Swing, AWT B IT M A N 35/1

Java Programozás 3. Gy: Java GUI Swing, AWT B IT M A N 35/1 2018. 02. 25 B ITv: M AN

Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy Array. List-et (listatömb, tömblista,

Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy Array. List-et (listatömb, tömblista, rugalmas tömb) használunk. n A java. util. Array. List osztályban található n Példányosítani kell Array. List<típus> = new Array. List<típus>(); n Csak burkoló osztály lehet az elemtípusa – Integer, Double, Character, Long, Boolean… – A lista csak és kizárólag referencia típusú adatokat képes tárolni, így primitív típusokat nem rakhatunk bele. n Fontos metódusok: – add(), size(), get(index), index. Of(érték), to. String() – remove(érték), set(index, érték), to. Array() 35/2 B IT M A N

Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy Array. List-et (listatömb, tömblista,

Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy Array. List-et (listatömb, tömblista, rugalmas tömb) használunk. Kezdjük a programosztállyal. import java. util. Array. List; public class Emp. Prg { private static Array. List<Emp> emp = new Array. List<Emp>(); public static void main(String[] args) { emp. add(new Emp("Kis Béla", 250000)); emp. add(new Emp("Jó Zoli", 325000)); emp. add(new Emp("Só Béla Peti", 99000)); emp. add(new Emp("Béla Tomi", 420000)); } } 35/3 B IT M A N

A kód A print metódus kódja az Emp-ben: import java. util. Array. List; public

A kód A print metódus kódja az Emp-ben: import java. util. Array. List; public class Emp {. . . public static void print(Array. List<Emp> emp){ System. out. println(""); for (Emp e : emp) System. out. println(e); } } Hívása az Emp. Prg-ben: Emp. print(emp); 35/4 B IT M A N

A kód A sort. Nev metódus kódja az Emp-ben: Hívása az Emp. Prg-ben: import

A kód A sort. Nev metódus kódja az Emp-ben: Hívása az Emp. Prg-ben: import java. util. Array. List; import java. util. Collections; Emp. sort. Nev(emp); import java. util. Comparator; public class Emp {. . . public static void sort. Nev(Array. List<Emp> emp){ Collections. sort(emp, new Comparator<Emp>() { public int compare(Emp e 1, Emp e 2) { return e 1. nev. compare. To(e 2. nev); } }); print(emp); } } A { } között egy névtelen osztály található, ami implementálja a Comparator interfészt. Az interfész compare metódusát kell felüldefiniálni: a két bemenő 35/5 IT elemet kell összehasonlítani úgy, hogy int típusú értéket adjon eredményül. A N B M

A kód A sort. Fiz metódus kódja az Emp-ben: import java. util. Array. List;

A kód A sort. Fiz metódus kódja az Emp-ben: import java. util. Array. List; import java. util. Collections; import java. util. Comparator; public class Emp {. . . public static void sort. Fiz(Array. List<Emp> emp){ Collections. sort(emp, new Comparator<Emp>() { public int compare(Emp e 1, Emp e 2) { return e 1. fiz - e 2. fiz; } }); print(emp); } Hívása az Emp. Prg-ben: } Emp. sort. Fiz(emp); 35/6 B IT M A N

A kód A search metódus kódja az Emp-ben: public class Emp {. . .

A kód A search metódus kódja az Emp-ben: public class Emp {. . . public static void search(Array. List<Emp> emp, String s) { boolean b = false; for (Emp e : emp) if (e. nev. contains(s)) b = true; //if (e. nev. equals(s)) b = true; System. out. println(""); if (b) System. out. println(s+": létezik"); else System. out. println(s+": nem létezik"); } } Hívása az Emp. Prg-ben: Emp. search(emp, "Kis Béla"); 35/7 B IT M A N

A kód A search. First. Name metódus kódja az Emp-ben: public class Emp {.

A kód A search. First. Name metódus kódja az Emp-ben: public class Emp {. . . public static void search. First. Name(Array. List<Emp> emp, String s){ System. out. println(""); for (Emp e : emp) { boolean b = false; String[] n = e. nev. split(" "); for (int j=1; j<n. length; j++) if (n[j]. equals(s)) b = true; if (b) System. out. println(s+": "+e. nev); } } } Hívása az Emp. Prg-ben: Emp. search. First. Name(emp, "Béla"); 35/8 B IT M A N

35/9 B IT M A N

35/9 B IT M A N

Feladat Készítsük el a grafikus felületű "Helló világ" programot. Lépések: 1. A main metódusban

Feladat Készítsük el a grafikus felületű "Helló világ" programot. Lépések: 1. A main metódusban példányosítunk egy JFrame-et. 2. Megadjuk a frame helyét, méretét. 3. A frame tartalom elrendezőjét kikapcsoljuk. 4. Készítünk egy feliratot (JLabel). 5. Megadjuk a felirat helyét, méretét. 6. A frame tartalompaneljéhez hozzáadjuk a feliratot 7. Beállítjuk, hogy mi történjen a frame-el, ha bezárjuk az ablakot. 8. Megjelenítjük a frame-et. A program ablaka átméretezhető, tálcára helyezhető, teljes képernyő méretűvé tehető. A program így egyetlen szálon fog futni 35/10 B IT M A N

A kód – v 1 Logika: komponens példányosítása, aztán méretezése, aztán hozzáadása az ablakhoz.

A kód – v 1 Logika: komponens példányosítása, aztán méretezése, aztán hozzáadása az ablakhoz. import javax. swing. *; public class Hello. Gr { public static void main(String[] args) { JFrame Foablak = new JFrame("Grafikus Hello"); Foablak. set. Bounds(50, 260, 150); Foablak. get. Content. Pane(). set. Layout(null); JLabel Felirat = new JLabel("Helló világ"); Felirat. set. Bounds(30, 100, 20); Foablak. get. Content. Pane(). add(Felirat); x xk yk y xm ym Foablak. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); Foablak. set. Visible(true); } } 35/11 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/12 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/12 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/13 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/13 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/14 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/14 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/15 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/15 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/16 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/16 B IT M A N

Eclipse megoldás (Saját felelősségre!) + 35/17 B IT M A N

Eclipse megoldás (Saját felelősségre!) + 35/17 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/18 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/18 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/19 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/19 B IT M A N

A kód – v 1 (by Eclipse) by Bit. Man import javax. swing. *;

A kód – v 1 (by Eclipse) by Bit. Man import javax. swing. *; public class Hello. Gr { public static void main(String[] args) { JFrame Foablak = new JFrame("Grafikus Hello"); Foablak. set. Bounds(50, 50 , 260, 150); Foablak. get. Content. Pane(). set. Layout(null); JLabel Felirat = new JLabel("Helló világ"); Felirat. set. Bounds(30, 100, 20); Foablak. get. Content. Pane(). add(Felirat); import java. awt. Border. Layout; import java. awt. Event. Queue; import javax. swing. JFrame; javax. swing. JPanel; javax. swing. border. Empty. Border; javax. swing. JLabel; public class Graph. Hello extends JFrame { Foablak. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); Foablak. set. Visible(true); private JPanel content. Pane; } /** * Launch the application. */ public static void main(String[] args) { Event. Queue. invoke. Later(new Runnable() { public void run() { try { } Graph. Hello frame = new Graph. Hello(); frame. set. Visible(true); } catch (Exception e) { e. print. Stack. Trace(); } } }); } /** * Create the frame. */ public Graph. Hello() { set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Bounds(100, 275, 196); content. Pane = new JPanel(); content. Pane. set. Border(new Empty. Border(5, 5, 5, 5)); set. Content. Pane(content. Pane); content. Pane. set. Layout(null); JLabel lbl. New. Label = new JLabel("Hello World!"); lbl. New. Label. set. Bounds(10, 11, 82, 14); content. Pane. add(lbl. New. Label); 35/20 } } B IT M A N

A kód – v 2 import javax. swing. *; public class Hello. Gr 2

A kód – v 2 import javax. swing. *; public class Hello. Gr 2 { private static void create. And. Show. Gui() { JFrame Foablak = new JFrame("Grafikus Hello"); JLabel Felirat = new JLabel("Helló világ"); Foablak. get. Content. Pane(). add(Felirat); Foablak. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); Foablak. pack(); Foablak. set. Visible(true); } public static void main(String[] args) { Swing. Utilities. invoke. Later(new Runnable() { public void run() { create. And. Show. Gui(); } } 35/21 B IT M A N

A kód – v 2 Logika: az alapértelmezett tartalom elrendezőt meghagyjuk, példányosítjuk és pakoljuk

A kód – v 2 Logika: az alapértelmezett tartalom elrendezőt meghagyjuk, példányosítjuk és pakoljuk a komponenseket, aztán becsomagoljuk az ablakot. pack(): a metódus hívásakor a tartalom elrendező úgy állítja be a komponensek méretét, helyét, hogy minden elférjen a keretben. invoke. Later(): új szálon indítja el a megadott kódot. Runnable(): interfész, melyet implementálni kell azokban az osztályokban, amelyekben szálkezelést hajtunk végre. run(): ezzel a metódussal indítható el kód az adott szálon. Ha több szálon futó programot írunk, így lehet egy szálat elindítani. Tapasztalat: ha az egyes grafikus komponensek lekezelését végző kódok nem túl idő- és energia igényesek, akkor futhat egyetlen szálon a grafikus program. 35/22 B IT M A N

A kód – v 3 import javax. swing. *; 1. public class Hello. Gr

A kód – v 3 import javax. swing. *; 1. public class Hello. Gr 3 extends JFrame { 2. 3. 4. 5. public Hello. Gr 3() { set. Title("Grafikus Hello"); set. Bounds(50, 300, 160); //set. Size(300, 160); //csak méret megadás //set. Location. Relative. To(null); //ablak középre helyezése JPanel dp = new JPanel(); dp. set. Layout(null); get. Content. Pane(). add(dp); JLabel jl 1 = new JLabel("Helló világ"); dp. add(jl 1); jl 1. set. Bounds(20, 50, 100, 20); 6. } public static void main(String[] args) { Hello. Gr 3 hg = new Hello. Gr 3(); 7. hg. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); hg. set. Resizable(false); 8. hg. set. Visible(true); } 35/23 } B IT M A N

A kód – v 3 Logika: 1. A JFrame leszármazottjaként létrehozunk egy osztályt. 2.

A kód – v 3 Logika: 1. A JFrame leszármazottjaként létrehozunk egy osztályt. 2. Megadjuk az ablak nevét, helyét, méretét. 3. Létrehozunk egy JPanel-t. 4. Kikapcsoljuk a panel tartalom elrendezőjét. 5. A panelt hozzáadjuk a frame tartalmához. 6. A panelre rakjuk a komponenseket. 7. Példányosítjuk az osztályt. 8. Letiltjuk a frame méretezhetőségét. A módszer viszonylag egyszerű, a kód átlátható, könnyen módosítható, bővíthető. Az ablak nem méretezhető át, így a tartalom sosem torzul el, mindig értelmezhető marad. 35/24 B IT M A N

A kód Szereljünk a panelre egy nyomógombot, funkciója legyen: bezárás. JButton bc = new

A kód Szereljünk a panelre egy nyomógombot, funkciója legyen: bezárás. JButton bc = new JButton(); bc. set. Text("Bezár"); dp. add(bc); bc. set. Bounds(180, 48, 80, 24); bc. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { System. exit(0); //==a program leállítása } }); 35/25 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/26 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/26 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/27 B IT M A N

Eclipse megoldás (Saját felelősségre!) 35/27 B IT M A N

35/28 B IT M A N

35/28 B IT M A N

A kód Rakjunk a panelra egy szövegmezőt, és egy újabb nyomógombot, melynek funkciója: a

A kód Rakjunk a panelra egy szövegmezőt, és egy újabb nyomógombot, melynek funkciója: a szövegmezőbe írt adat kiírása egy üzenetpanelre. import java. awt. event. *; import javax. swing. *; public class Hello. Gr 32 extends JFrame { public Hello. Gr 32() { set. Title("Beolvasó, kiíró példa"); set. Bounds(50, 300, 160); JPanel dp = new JPanel(); dp. set. Layout(null); this. get. Content. Pane(). add(dp); JLabel jl 1 = new JLabel("Írj be valamit!"); dp. add(jl 1); jl 1. set. Bounds(20, 150, 20); 35/29 B IT M A N

A kód JText. Field adat = new JText. Field(""); dp. add(adat); adat. set. Bounds(20,

A kód JText. Field adat = new JText. Field(""); dp. add(adat); adat. set. Bounds(20, 50, 220, 20); JButton ba = new JButton(); ba. set. Text("Kiír"); dp. add(ba); ba. set. Bounds(60, 90, 80, 24); ba. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { String s = adat. get. Text(); JOption. Pane. show. Message. Dialog(Hello. Gr 32. this, "A beírt adat: "+s, "Üzenet a programtól", 1); } }); 35/30 B IT M A N

A kód JButton bc = new JButton(); bc. set. Text("Bezár"); dp. add(bc); bc. set.

A kód JButton bc = new JButton(); bc. set. Text("Bezár"); dp. add(bc); bc. set. Bounds(160, 90, 80, 24); bc. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { System. exit(0); } }); } //== main vége public static void main(String[] args) { Hello. Gr 32 hg = new Hello. Gr 32(); hg. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); hg. set. Resizable(false); hg. set. Visible(true); } } 35/31 B IT M A N

Üzenetpanel JOption. Pane. show. Message. Dialog(T, Ü, F, I) - Üzenetablak megjelenítése. A megjelenő

Üzenetpanel JOption. Pane. show. Message. Dialog(T, Ü, F, I) - Üzenetablak megjelenítése. A megjelenő ablak modális, ez kb. azt jelenti, hogy amíg le nem OKézzuk, nem folytathatjuk a főprogram használatát! T - A tulajdonos (most null, vagyis nincs definiálva) Ü – A panelen megjelenő üzenet szövege F - A panel címe, felirata (most a globális bm string) I - A panel ikonja (0 -Stop, 1 -Info, 2 -Figyelmeztetés, 3 -Kérdés) 35/32 B IT M A N

35/33 B IT M A N

35/33 B IT M A N

35/34 B IT M A N

35/34 B IT M A N

V ÉGE VÉGE 35/35 B IT M A N

V ÉGE VÉGE 35/35 B IT M A N