Java Programozás 3. Gy: Java GUI. Swing, AWT

Hasonló dokumentumok
Java Programozás 11. Ea: MVC modell

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Programozási technológia

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Java felhasználói felület

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Java felhasználói felület

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Swing. (A javax.swing csomag)

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Concurrency in Swing

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

OOP: Java 8.Gy: Gyakorlás

Szoftvertechnológia alapjai Java előadások

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

7. K: JAVA alapok Konzultáció

Programozási technológia

Swing GUI készítése NetBeans IDE segítségével

Java és web programozás

ZH mintapélda. Feladat. Felület

Java Programozás 2. Gy: EmpProgram. Grafikus felületű adatkezelő program

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Programozási nyelvek Java

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java Programozás 8. Ea: GUI. Graphical User Interface

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Java programozási nyelv 6. rész Java a gyakorlatban

Végrehajtási szálak - kiegészítések. Szinkronizálás, érvénytelenített metódusok helyettesítése

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Programozás I. Első ZH segédlet

BME MOGI Gépészeti informatika 4.

Java és web programozás

Java felhasználói felület

Szoftvertechnológia alapjai Java előadások

OOP: Java 4.Gy: Java osztályok

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

és az instanceof operátor

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

OOP: Java 5.Gy: Osztály, referencia, konstruktor

A Java nyelv. Dialógus ablakok. Elek Tibor

BME MOGI Gépészeti informatika 8.

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Szoftvertechnolo gia gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek II.: JAVA

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Programozási nyelvek és módszerek Java Thread-ek

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

JAVA SE/ME tanfolyam tematika

OOP: Java 7.Gy: Öröklődés, referenciák

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

4. Gy: JAVA osztályok

Az új be- és kimenet könyvtár

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg:

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Programozás II. ATM példa Dr. Iványi Péter

I. 288.: Utcai WiFi térkép

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Access adatbázis elérése OLE DB-n keresztül

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Java és web programozás

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java és web programozás

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

Java VII. Polimorfizmus a Java nyelvben

Eseménykezelés Java környezetben, AWT alapok

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Java IX. telkezelés a Java-ban

Programozási nyelvek II.: JAVA, 4. gyakorlat

Java VII. Polimorfizmus a Java nyelvben

Java programozási nyelv 5. rész Osztályok III.

Java IX. telkezelés a Java-ban

Java és web programozás

Java és web programozás

OOP: Java 1.Gy: Java alapok

Programozási nyelvek II.: JAVA

JAVA PROGRAMOZÁS 5.ELŐADÁS

OOP: Java 1.Gy: Java alapok

Objektumorientált programozás C# nyelven III.

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Átírás:

Java Programozás 3. Gy: Java GUI Swing, AWT 35/1 B ITv: MAN 2018.02.25

Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy ArrayList-et (listatömb, tömblista, rugalmas tömb) használunk. A java.util.arraylist osztályban található Példányosítani kell ArrayList<típus> = new ArrayList<típus>(); 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. Fontos metódusok: add(), size(), get(index), indexof(érték), tostring() remove(érték), set(index, érték), toarray() 35/2

Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy ArrayList-et (listatömb, tömblista, rugalmas tömb) használunk. Kezdjük a programosztállyal. import java.util.arraylist; public class EmpPrg { private static ArrayList<Emp> emp = new ArrayList<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

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

A kód A sortnev metódus kódja az Emp-ben: import java.util.arraylist; Hívása az EmpPrg-ben: import java.util.collections; import java.util.comparator; Emp.sortNev(emp); public class Emp {... public static void sortnev(arraylist<emp> emp){ Collections.sort(emp, new Comparator<Emp>() { public int compare(emp e1, Emp e2) { return e1.nev.compareto(e2.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 elemet kell összehasonlítani úgy, hogy int típusú értéket adjon eredményül.

A kód A sortfiz metódus kódja az Emp-ben: import java.util.arraylist; import java.util.collections; import java.util.comparator; public class Emp {... public static void sortfiz(arraylist<emp> emp){ Collections.sort(emp, new Comparator<Emp>() { public int compare(emp e1, Emp e2) { return ); print(emp); e1.fiz - e2.fiz; Hívása az EmpPrg-ben: 35/6 Emp.sortFiz(emp);

A kód A search metódus kódja az Emp-ben: public class Emp {... public static void search(arraylist<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 EmpPrg-ben: 35/7 Emp.search(emp, "Kis Béla");

A kód A searchfirstname metódus kódja az Emp-ben: public class Emp {... public static void searchfirstname(arraylist<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 EmpPrg-ben: 35/8 Emp.searchFirstName(emp, "Béla");

35/9

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

A kód v1 Logika: komponens példányosítása, aztán méretezése, aztán hozzáadása az ablakhoz. x import javax.swing.*; public class HelloGr { public static void main(string[] args) { JFrame Foablak = new JFrame("Grafikus Hello"); Foablak.setBounds(50,50, 260,150); Foablak.getContentPane().setLayout(null); JLabel Felirat = new JLabel("Helló világ"); Felirat.setBounds(30,10, 100,20); Foablak.getContentPane().add(Felirat); y xk yk ym xm Foablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Foablak.setVisible(true); 35/11

Eclipse megoldás (Saját felelősségre!) 35/12

Eclipse megoldás (Saját felelősségre!) 35/13

Eclipse megoldás (Saját felelősségre!) 35/14

Eclipse megoldás (Saját felelősségre!) 35/15

Eclipse megoldás (Saját felelősségre!) 35/16

Eclipse megoldás (Saját felelősségre!) + 35/17

Eclipse megoldás (Saját felelősségre!) 35/18

Eclipse megoldás (Saját felelősségre!) 35/19

A kód v1 (by Eclipse) import java.awt.borderlayout; import java.awt.eventqueue; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.border.emptyborder; import javax.swing.jlabel; public class GraphHello extends JFrame { private JPanel contentpane; /** * Launch the application. */ public static void main(string[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { GraphHello frame = new GraphHello(); frame.setvisible(true); catch (Exception e) { e.printstacktrace(); ); /** * Create the frame. */ public GraphHello() { setdefaultcloseoperation(jframe.exit_on_close); setbounds(100, 100, 275, 196); contentpane = new JPanel(); contentpane.setborder(new EmptyBorder(5, 5, 5, 5)); setcontentpane(contentpane); contentpane.setlayout(null); import javax.swing.*; public class HelloGr { public static void main(string[] args) { JFrame Foablak = new JFrame("Grafikus Hello"); Foablak.setBounds(50,50, 260,150); Foablak.getContentPane().setLayout(null); JLabel Felirat = new JLabel("Helló világ"); Felirat.setBounds(30,10, 100,20); Foablak.getContentPane().add(Felirat); by BitMan Foablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Foablak.setVisible(true); 35/20 JLabel lblnewlabel = new JLabel("Hello World!"); lblnewlabel.setbounds(10, 11, 82, 14); contentpane.add(lblnewlabel);

A kód v2 import javax.swing.*; public class HelloGr2 { private static void createandshowgui() { JFrame Foablak = new JFrame("Grafikus Hello"); JLabel Felirat = new JLabel("Helló világ"); Foablak.getContentPane().add(Felirat); Foablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Foablak.pack(); Foablak.setVisible(true); public static void main(string[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createandshowgui(); ); 35/21

A kód v2 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. invokelater(): ú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

1. 2. 3. 4. 5. 6. 7. 8. A kód v3 import javax.swing.*; public class HelloGr3 extends JFrame { 35/23 public HelloGr3() { settitle("grafikus Hello"); setbounds(50,50, 300,160); //setsize(300, 160); //csak méret megadás //setlocationrelativeto(null); //ablak középre helyezése JPanel dp = new JPanel(); dp.setlayout(null); getcontentpane().add(dp); JLabel jl1 = new JLabel("Helló világ"); dp.add(jl1); jl1.setbounds(20,50, 100,20); public static void main(string[] args) { HelloGr3 hg = new HelloGr3(); hg.setdefaultcloseoperation(jframe.exit_on_close); hg.setresizable(false); hg.setvisible(true);

A kód v3 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

A kód Szereljünk a panelre egy nyomógombot, funkciója legyen: bezárás. JButton bc = new JButton(); bc.settext("bezár"); dp.add(bc); bc.setbounds(180,48, 80,24); bc.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.exit(0); //==a program leállítása ); 35/25

Eclipse megoldás (Saját felelősségre!) 35/26

Eclipse megoldás (Saját felelősségre!) 35/27

35/28

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 HelloGr32 extends JFrame { public HelloGr32() { settitle("beolvasó, kiíró példa"); setbounds(50,50, 300,160); JPanel dp = new JPanel(); dp.setlayout(null); this.getcontentpane().add(dp); JLabel jl1 = new JLabel("Írj be valamit!"); dp.add(jl1); jl1.setbounds(20,20, 150,20); 35/29

A kód JTextField adat = new JTextField(""); dp.add(adat); adat.setbounds(20,50, 220,20); JButton ba = new JButton(); ba.settext("kiír"); dp.add(ba); ba.setbounds(60,90, 80,24); ba.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { String s = adat.gettext(); JOptionPane.showMessageDialog(HelloGr32.this, "A beírt adat: "+s, "Üzenet a programtól", 1); ); 35/30

A kód 35/31 JButton bc = new JButton(); bc.settext("bezár"); dp.add(bc); bc.setbounds(160,90, 80,24); bc.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.exit(0); ); //== main vége public static void main(string[] args) { HelloGr32 hg = new HelloGr32(); hg.setdefaultcloseoperation(jframe.exit_on_close); hg.setresizable(false); hg.setvisible(true);

Üzenetpanel JOptionPane.showMessageDialog(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

35/33

35/34

VÉGE VÉGE 35/35