Java felhasználói felület

Hasonló dokumentumok
Programozási technológia

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

Java felhasználói felület

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

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

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

Java Programozás 11. Ea: MVC modell

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java felhasználói felület

Algoritmusok és adatszerkezetek II.

A Java nyelv. Dialógus ablakok. Elek Tibor

Programozási nyelvek Java

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

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

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

Collections. Összetett adatstruktúrák

Swing. (A javax.swing csomag)

Programozási nyelvek Java

JavaServer Pages (JSP) (folytatás)

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

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

OOP: Java 8.Gy: Gyakorlás

Programozás I. Első ZH segédlet

Concurrency in Swing

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

ANDROID ALKALMAZÁSFEJLESZTÉS

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

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

C# osztályok. Krizsán Zoltán

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

- Alkalmazásfejlesztési szemlélet megismerése - Java GUI készítés bemutatása Swing-ben - Órai feladat megoldása

Elemi alkalmazások fejlesztése III.

ZH mintapélda. Feladat. Felület

és az instanceof operátor

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).

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

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

Abstract osztályok és interface-ek. 7-dik gyakorlat

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

Segédanyag: Java alkalmazások gyakorlat

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

C#, OOP. Osztályok tervezése C#-ban

Osztályok. 4. gyakorlat

JAVA SE/ME tanfolyam tematika

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

Programozási technológia

ECDL Táblázatkezelés A táblázatkezelés első lépései Beállítások elvégzése

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

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

Programozási nyelvek Java

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

BME MOGI Gépészeti informatika 8.

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?

Szoftvertechnológia alapjai Java előadások

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

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

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

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Adatbázis-kezelés ActiveX vezérl kkel 2.rész

OOP #14 (referencia-elv)

Programozási nyelvek Java

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

Programozási nyelvek Java

Programozási nyelvek II.: JAVA

Alkalmazásfejlesztési technológia. Vizsgakövetelmények. 1. Megjelenítési technikák. Magasabb szintű komponensek. Feladat - RendererTeszt

Algoritmusok és adatszerkezetek II.

Objektumorientált programozás C# nyelven

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

Az MS Excel táblázatkezelés modul részletes tematika listája

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

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

BME MOGI Gépészeti informatika 7.

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Objektumorientált programozás C# nyelven III.

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

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

Java és web programozás

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

Java programozási nyelv 4. rész Osztályok II.

C++ programozási nyelv Konstruktorok-destruktorok

3. modul - Szövegszerkesztés

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

Adatelemzés SAS Enterprise Guide használatával. Soltész Gábor solteszgabee[at]gmail.com

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Algoritmusok és adatszerkezetek II.

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

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

Java II. I A Java programozási nyelv alapelemei

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Átírás:

Java felhasználói felület Táblázat Elek Tibor

Szerep: táblázatos adatok megjelenítése, szerkesztése Fogalmak: - Adatmodell (TableModel): szolgáltatja az adatokat és változásait, illetve az adatok típusait - Oszlop (TableColumn): egy oszlop jellemzőit tartalmazza (modell oszlopindex, fejléc információk, szélesség, renderer, editor, stb.) - Renderer (TableCellRenderer): szolgáltatja az adott cella megjelenítését. Típusokhoz megadható.

Fogalmak: - Editor (TableCellEditor): cella editálásakor megjelenő editor. Típusokhoz megadható. - Rendező (RowSorter): Egy oszlop összehasonlító algoritmusát tartalmazza. - Kiválasztás modell: Az adat (sor, oszlop) kiválasztási módot írja le.

Szolgáltatások: - DefaultTableModel generálása (csak Object adatokhoz érdemes) - DefaultCellRenderer az egyes típusokhoz (boolean, szám, Object) - DefaultCellEditor az egyes típusokhoz (boolean, szám, String) - RowSorter-ek automatikus generálása - DefaultSelectionModel

TableModel AbstractTableModel: addtablemodellistener(): Modell (adatok) változásai getcolumnclass(): egy adat típusát adja. Fontos felüldefiniálni! getvalueat(): egy adott sor, oszlop adatát adja setvalueat(): adatot beállítja iscelleditable(): editálható-e a cella

TableModel DefaultTableModel: Az adatok tárolását Vector-ral oldja meg. Oszlopok típusaként Object-et ad. (Leszármaztatás, getcolumnclass() felüldefiniálás.) Funkciói: sor, oszlop hozzáadás, törlés, lekérdezés, stb. Pl. addrow(object[]), addrow(vector), addcolumn(string), stb.

TableModel DefaultTableModel használat: definiálás pl.: private class SajatTableModel extends DefaultTableModel { private Class[] oszloptip = new Class[] { String.class, Integer.class }; public SajTableModel(Object[] columnnames, int rowcount) { super(columnnames, rowcount); } @Override public Class<?> getcolumnclass(int columnindex) { return oszloptipusok[columnindex]; } }

TableModel DefaultTableModel használat: létrehozás, hozzárendelés: Object[] oszlopok = new Object[] { Név, Kor }; SajatTableModel stm = new SajatTableModel(oszlopok, 0); this.jtable1.setmodel(stm); Sorok hozzáadása: stm.addrow(new Object[] { Béla, 24});

TableModel Egy másik tablemodel példa: private class SajatTableModel extends AbstractTableModel { private String[] oszlopnevek = new String[] { "Név", "Kor", "Születési dátum" }; private Class[] oszloptipusok = new Class[] { String.class, Integer.class, Date.class }; private ArrayList<Szemely> szemelyek; public SajatTableModel() { this.szemelyek = new ArrayList<Szemely>(); } public ArrayList<Szemely> getszemelyek() { return szemelyek; } public Class<?> getcolumnclass(int columnindex) { return oszloptipusok[columnindex]; } public int getrowcount() { return this.szemelyek.size(); } public int getcolumncount() { return this.oszlopnevek.length; } public String getcolumnname(int column) { return this.oszlopnevek[column]; } public boolean iscelleditable(int rowindex, int columnindex) { return true; }

TableModel Egy másik tablemodel példa folytatás: public Object getvalueat(int rowindex, int columnindex) { if (columnindex == 0) return this.szemelyek.get(rowindex).getnev(); if (columnindex == 1) return this.szemelyek.get(rowindex).getkor(); if (columnindex == 2) return this.szemelyek.get(rowindex).getszul(); return new Object(); } public void setvalueat(object avalue, int rowindex, int columnindex) { if (columnindex == 0) this.szemelyek.get(rowindex).setnev((string)avalue); if (columnindex == 1) this.szemelyek.get(rowindex).setkor((integer)avalue); if (columnindex == 2) this.szemelyek.get(rowindex).setszul((date)avalue); firetablerowsupdated(rowindex, columnindex); } }

Oszlopok Automatikus generálás: setautocreatecolumnsfrommodel(boolean) Oszlop modell: addcolumn(), removecolumn()!!! getcolumn(), movecolumn() Oszlop műveletek: get(set) HeaderValue, MinWidth, MaxWidth, PreferredWidth, ModelIndex, HeaderRenderer, CellRenderer, CellEditor

Oszlopok - Az oszlopok bővítésére, törlésére az adatmodellnek is fel kell készülni. (A példa adatmodell esetén nem szabad változtatni az oszlopokat.) - Oszlopok elrejtése funkció nem létezik. Megoldása oszlopok törlésével, hozzáadásával. - Példa: 2. oszlop szélesség, felirat beállítás TableColumn a = jtable1.getcolumnmodel().getcolumn(1); oszlopszélesség: a.setpreferredwidth(150); fejléc: a.setheadervalue( Életkor );

TableCellRenderer DefaultTableCellRenderer: - Boolean: checkbox - Number: label, jobbra igazított tartalom, NumberFormat.getXXXInstance()-tal formázva - Date: label, jobbra igazítva, DateFormat.getDateInstance(DateFormat.SHOR T)-al formázva - ImageIcon: label, középre igazítva - egyéb: label, balra igazítva (a tartalom tostring())

TableCellRenderer Saját renderer a Defaultból példa short dateformat helyett long: private class DateRenderer extends DefaultTableCellRenderer { DateFormat formatter; protected void setvalue(object value) { if (this.formatter == null) this.formatter = DateFormat.getDateInstance(DateFormat.LONG); } } this.settext(value == null? "" : this.formatter.format(value));

TableCellRenderer Saját renderer a Defaultból példa short dateformat helyett long folytatás: Használat: jtable1.setdefaultcellrenderer(date.class, new DateRenderer()); vagy TableColumn a = jtable1.getcolumnmodel().getcolumn(2); a.setcellrenderer(new DateRenderer());

TableCellRenderer Saját renderer TableCellRenderer-ből: lásd. Swing tutorial példák lásd példák editornál

Cella editálás DefaultCellEditor - Boolean: JCheckBox - Number: JFormattedTextField - Egyéb: JTextField Saját editorral megtöltött Default: Három konstruktor: JCheckBox, JComboBox, JTextField JComboBox cmb = new JComboBox(); cmb.additem("egyik"); cmb.additem("másik"); egyikcolumn.setcelleditor(new DefaultCellEditor(cmb));

Cella editálás Saját editor az AbstractCellEditor-ból: felüldefiniálandó metódusok: Component gettablecelleditorcomponent() : visszaadja a belső editor-t. Object getcelleditorvalue() : editálás végén visszaadja az értéket iscelleditable(eventobject evt) : editálás feltétele (pl. hány klikkre) boolean stopcellediting() : meghívódik mielőtt befejeződne az editálás, pl. validálásra használható

Cella editálás Saját editor az AbstractCellEditor-ból: Példa: JSpinner cell editorként private class SpinnerEditor extends AbstractCellEditor implements TableCellEditor { final JSpinner spinner = new JSpinner(); public SpinnerEditor() { spinner.setmodel(new SpinnerDateModel()); } public Component gettablecelleditorcomponent( JTable table, Object value, boolean isselected, int row, int column) { spinner.setvalue(value); return spinner; }

Cella editálás Saját editor az AbstractCellEditor-ból: Példa: JSpinner cell editorként folytatás public boolean iscelleditable(eventobject evt) { if (evt instanceof MouseEvent) { return ((MouseEvent)evt).getClickCount() >= 2; } return true; } public Object getcelleditorvalue() { return spinner.getvalue(); } } }

Rendezés table.setautocreaterowsorter(true); minden oszlopra az alapértelmezett Comparatorral TableRowSorter funkciók: get(set), is(set) Comparator : egy java.util.comparator, Sortable : rendezhető-e, SortKeys : a jelenlegi rendezés, MaxSortKeys: hány oszlop szerint lehet rendezve

Rendezés Példa: jtable1.setautocreaterowsorter(true); Sorter lekérdezése: TableRowSorter<TableModel> so = (TableRowSorter<TableModel>)jTable1.getRowSort er(); A 0. oszlop szerinti rendezés letíltása: so.setsortable(0, false); Saját comparator az 1. oszlophoz: so.setcomparator(1, new SajatComparator()); Rendezés beállítása kódból (2. oszlop növekvő): ArrayList <RowSorter.SortKey> keys = new ArrayList<RowSorter.SortKey>(); keys.add(new RowSorter.SortKey(2, SortOrder.ASCENDING)); so.setsortkeys(sortkeys);

Szűrés A rendezőnek megadható szűrési feltétel is. Létező Filter-ek: datefilter, numberfilter, regexfilter: dátumra, számra, szövegre andfilter, orfilter, notfilter: több filter összekapcsolása Pl. az 1. vagy 3. oszlopban al -t tartalmaz so.setrowfilter( RowFilter.regexFilter(".*al.*",0,2)); a második oszlopban 20-nál kisebb: so.setrowfilter(rowfilter.numberfilter( RowFilter.ComparisonType.BEFORE, 20, 1));

Kiválasztás Sor, oszlop, cellatartomány kiválasztás. DefaultListSelectionModel-t használ. (lásd JList.) DefaultListSelectionModel beállítása: setselectionmode(): egy, folytonos, több kiválasztás setxxxselectionallowed() : Cell, Column, Row kiválaszthatóság (egymást befolyásoló lehetőségek!)

Kiválasztás Kiválasztás kezelése:xxx: Row, Column int getselectedxxx(), int getselectedxxxcount(), int[] getselectedxxxs(), boolean iscellselected(int row, int col), boolean isxxxselected(int index), void addxxxselectioninterval(int tol, int ig), void setxxxselectioninterval(int tol, int ig), void changeselection(int row, int col, boolean toggle, boolean extend), void clearselection(), void selectall()

Model vs View Fontos: A táblázat kezelő metódusai a view sor, oszlop, cella sorszámát használják nem a modellbeli sorszámát!! Rendezéskor, szűréskor, oszlopmozgatáskor a kettő eltér egymástól!! Az egyikből a másikba: int convertxxxindextomodel(int viewindex) int convertxxxindextoview(int modelindex)

Model vs View Például a táblázat get(set)valueat() metódusa a view indexeket használja, a modell get(set)valueat() metódusa a modell indexeket. Például a getselectedxxx() metódus a view sorszámot adja vissza.

Gyakran használt események - Adat modell változások: a model metódusával getmodel().addtablemodellistener() - Kiválasztás változások: a selection modellek metódusaival getselectionmodel().addlistselectionlistener() és az oszlop kiválasztásra getcolumnmodel().getselectionmodel().addlistse lectionlistener()

Egyebek Adat: get(set)valueat() Kinézet: get(set) ShowGrid, ShowHorizontalLines, ShowVerticalLines, GridColor RowHeight, RowMargin Scrollozás: JScrollPane-be kell rakni

Példa

Gyakorlat Készítsen egy űrlapot, amelyben egy táblázatban lehet könyv író, cím, stílus, oldalszám, ár adatokat megjeleníteni, módosítani, újat felvinni, törölni. Használjon DefaultTableModel leszármazottat. A stílus megadásához készítsen egy combobox-t celleditorként. Az ár megjelenítéshez egy cell renderer-t, amely az alapértelmezett pénz formátumban jeleníti meg az árat.