Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 6.ELŐADÁS 2014-2015 tavasz Swing komponensek; Grafika; Elemi események
2 Swing komponensek
Swing konstansok SwingConstants 3 interfész Általános konstansokat deklarál Mindegyik:static int Igazítások: TOP, BOTTOM, LEFT, RIGHT, CENTER, LEADING, TRAILING Állás: VERTICAL, HORIZONTAL Irány: NORTH, SOUTH, EAST, WEST Példa: JLabel lbinfo = new JLabel("Információs szöveg"); lbinfo.sethorizontalalignment(swingconstants.center); lbinfo.sethorizontalalignment(jlabel.center); lbinfo.sethorizontalalignment(lbinfo.center);
Címke JLabel 4 Információ (szöveg / ikon) kiírására használatos Magas szintű esemény nem keletkezik rajta Nem kerülhet billentyűzetfókuszba Jellemzők String text Icon icon int horizontalalignment int verticalalignment int horizontaltextposition int verticaltextposition
Címke JLabel 5 Példák: cp.add(new JLabel("Nincsen ikonja, alapértelmezett igazítás")); ImageIcon iijobb = new ImageIcon("icons/jobb.jpg"); JLabel lb = new JLabel("Csak elıre!",iijobb,jlabel.center); cp.add(lb); lb.sethorizontaltextposition(jlabel.leading);
AbstractButton - A gombok őse 6 Gombszerű komponensek absztrakt őse: AbstractButton +--JButton +--JToggleButton +--JCheckBox +--JRadioButton +--JMenuItem A gombok a ButtonGroup segítségével csoportba foglalhatók
AbstractButton - A gombok őse 7 Események ActionEvent Jellemzők String text Icon icon int mnemonic boolean selected String actioncommand Metódusok void doclick()
Nyomógomb JButton 8 Valamilyen akció, parancs elindítására használatos Események (örökölt) ActionEvent Jellemzők String text Icon icon int mnemonic boolean selected String actioncommand Metódusok (örökölt) void doclick()
Nyomógomb JButton 9 Feladat:
10 A gombok figyelőláncai
11 Példa - Forráskód
12 Példa - Forráskód
Jelölőmező JCheckBox 13 Kétállapotú gomb logikai igaz/hamis állapot jelölésére Egymástól független jelölésekre szokás használni Események (örökölt) ActionEvent Jellemzők (örökölt) String text Icon icon int mnemonic boolean selected String actioncommand
14 Jelölőmező Példa
15 Jelölőmező Példa
16 Rádiógomb JRadioButton, csoportosítás Kétállapotú gomb logikai igaz/hamis állapot jelölésére Egymástól függő jelölésekre szokás használni Csoportosítani szokás (ButtonGroup segítségével) Események (örökölt) ActionEvent Jellemzők (örökölt) Mint a jelülőmezőnél Metódusok void doclick()
17 Gombok csoportosítása ButtonGroup osztály Logikai csoportosítás A csoport gombjai közül egyszerre egy jelölhető be Csoport elemei: rádiógombok, AbstractButton utódok A ButtonGroup objektum összefogja a gombokat, felügyeli azok ki-be kapcsolását Nem komponens, nem keletkezik rajta esemény Konstruktor, metódusok ButtonGroup() void add(abstractbutton b) int getbuttoncount()
18 Gombok csoportosítása Példa
Kombinált lista JComboBox 19 Szerkeszthető szövegmező és legördülő lista kombinációja Események ActionEvent ItemEvent Jellemzők boolean editable int maximumrowcount boolean popupvisible Object selecteditem int selectedindex Konstruktorok JComboBox() JComboBox(Object[] items) JComboBox(Vector items)
Kombinált lista JComboBox 20 Metódusok void additem(object anobject) void insertitemat(object anobject, int index) void removeitem(object anobject) void removeitemat(int anindex) void removeallitems() Példa: JComboBox cb = new JComboBox(); cp.add(cb); cb.additem("erika"); cb.additem("margó"); cb.additem("mari");
21 MVC modell
Az MVC modell összetevői 22 Model (modell): a komponens adatai, állapota View (nézet): a komponens megjelenése a képernyőn (look and feel, skin) Controller (vezérlő): a komponens viselkedése Egy modellen több nézet osztozhat Javában a nézet és a viselkedés csak részben válik el Javában modell adatainak kiolvasása: komponens.getmodel().getadat() Például: ta.getdocument().getlength()
23 Modell interfészek,alapértelmezett modellek Modell interfész Metódusai (néhány) Mi használja? Alapértelm. osztály Document adddocumentlistener getlength gettext (JTextComponent) JTextField JTextArea (AbstractDocument) PlainDocument ListModel addlistdatalistener getelementat getsize JList (AbstractListModel) DefaultListModel ListSelection - Model addlistselectionlistener clearselection getselectionmode JList DefaultListSelection - Model
A szövegek őse JTextComponent 24 Szövegkomponensek absztrakt őse: JTextComponent +--JTextField +--JPasswordField +--JtextArea Adatmodellje: Document Esemény DocumentEvent (adatmodellen)
A szövegek őse JTextComponent 25 Jellemzők Document doc String text Caret caret int caretposition Color caretcolor boolean editable int selectionstart int selectionend Color selectioncolor Color selectedtextcolor
Szövegmező JTextField 26 Beviteli mező Események ActionEvent DocumentEvent (adatmodellen, örökölt) Jellemzők örökölt: doc, text, caret, caretposition, caretcolor, editable, selectionstart, selectionend, selectioncolor, selectedtextcolor int columns int horizontalalignment
Szövegterület JTextArea 27 Többsoros beviteli mező Nincs görgetősávja; görgetés: JTextArea ta = new JTextArea(); cp.add(new JScrollPane(ta)); Esemény DocumentEvent (adatmodellen, örökölt) Jellemzők örökölt: doc, text, caret, caretposition, caretcolor, editable, selectionstart, selectionend, selectioncolor, selectedtextcolor
Szövegterület JTextArea 28 Jellemzők (folyt.) int columns int rows int tabsize boolean linewrap Metódusok void insert(string str, int pos) void append(string str) void replacerange(string str, int start, int end)
Szövegterület JTextArea 29 Metódusok (folyt.) int getlinecount() int getlinestartoffset(int line) int getlineendoffset(int line) int getlineofoffset(int offset) AbstractDocument osztály metódusai String gettext(int offset, int length) int getlength()
Lista JList 30 Választható szövegek listája Nem gördül le, fix területen helyezkedik el Egyszerre több eleme is kiválasztható Adatmodellje: ListModel Kiválasztásmodellje: ListSelectionModel Esemény ListSelectionEvent (kiválasztásmodellen) Példa: JList lista=new JList(); lista.getmodel().addelement("hosszúhetény"); DefaultListModel model = new DefaultListModel(); JList lista=new JList(model); model.addelement("hosszúhetény");
Lista JList 31 Jellemzők ListModel model (alapért.:defaultlistmodel) int selectionmode Lehetséges értékei (ListSelectionModel): SINGLE_SELECTION, SINGLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION int selectedindex int visiblerowcount int fixedcellwidth int fixedcellheight
Lista JList 32 Metódusok void setlistdata(object[] listdata) void setlistdata(vector listdata) void setselectedvalue(object anobject, boolean shouldscroll) Object getselectedvalue() Object[] getselectedvalues() void setselectedindex(int index) int getselectedindex() void setselectedindices(int[] indices) int[] getselectedindices()
Lista JList 33 Metódusok boolean isselectedindex(int index) boolean isselectionempty() void clearselection() int getfirstvisibleindex() int getlastvisibleindex() DefaultListModel osztály Vectorhoz hasonló
Menüsor JMenuBar 34 Program funkcióinak csoportosítása Menühierarchia: tetején: menüsor (JMenuBar) menüsor elemei: lebomló menük (JMenu) menü lehetséges elemei: újabb menü (JMenu) menütétel (JMenuItem) jelölő-menütétel (JCheckBoxMenuItem) rádió-menütétel (JRadioButtonMenuItem) menüelválasztó (szeparátor)
Menüsor JMenuBar 35 Menüsor (főmenü) a keret tulajdona kerethez rendelés: setjmenubar(jmenubar mb) Menütételek Gombok tovább nem bonthatók Gyorsabb elérés emlékeztető karakter (menü, menütétel) gyorsbillentyű (menütétel)
Menüsor JMenuBar 36 Menüosztályok hierarchiája JComponent Esemény: +--JMenuBar +--AbstractButton +--JMenuItem +--JCheckBoxMenuItem +--JRadioButtonMenuItem +--Jmenu ActionEvent minden gombon keletkezik menütételeken kell lekezelni
Menüsor JMenuBar 37 JMenuBar osztály JMenuBar() JMenu add(jmenu m) JMenu osztály JMenu(String text) JMenu() JMenuItem add(jmenuitem mi) void addseparator() void insertseparator(int index)
Menüsor JMenuBar 38 JMenuItem osztály JMenuItem(String text, Icon icon) JMenuItem(String text, int mnemonic) örökölt jellemzők: text, icon, mnemonic, selected, actioncommand boolean enabled Keystroke accelerator void doclick()
Menüsor JMenuBar 39 Példa: JMenuBar mb; JMenu mfile; setjmenubar(mb=new JMenuBar()); mb.add(mfile=new JMenu("File")); mb.add(new JMenu("Help")); mfile.add(new JMenuItem("Open")); mfile.addseparator(); mfile.add(new JMenuItem("Exit")); Menüsor Menütételek (lehetnének újabb menük is) Menük Menüszeparátor
Dialógusablak JDialog 40 Tipikusan felhasználói adatbevitelre, nyugtázásra, információközlésre szokás használni Tulajdonosa: keret vagy másik dialógusablak Lehet modális Tartalompanel Gyerekeit a tartalompanelbe kell tenni: dialog.getcontentpane().add(gyerek); elrendezés-menedzsere alapértelmezésben határmenti Esemény WindowEvent
Dialógusablak JDialog 41 Jellemzők String title boolean modal boolean resizable Konstruktorok, metódusok JDialog(Frame owner, String title, boolean modal) JDialog(Dialog owner, String title, boolean modal) void show() void hide()
JOptionPane osztály 42 Az opciópanel statikus metódusai szabványos dialógusokat jelenítenek meg modálisan: Információközlés (showmessagedialog) Megerősítés kérése (showconfirmdialog) Adatkérés (showinputdialog) Dialógusablak összeállítása Dialógus típusa: Message, Confirm, Input, Option Ikon (messagetype) megadása Üzenet (message) megadása Opciók kiválasztása
JOptionPane osztály 43 Dialóguskészítő metódusok paraméterei Component parent Object message String title int messagetype Icon icon int optiontype Object[] selectionvalues Object initialselectionvalue Object[] options Object initialvalue
JOptionPane osztály 44 Dialóguskészítő metódusok static void showmessagedialog(paraméterek) Paraméterek: parent, message, title, messagetype, icon static int showconfirmdialog(paraméterek) Paraméterek: parent, message, title, optiontype, messagetype, icon static String showinputdialog(paraméterek) Paraméterek: parent, message, title, messagetype, icon, selectionvalues, initialselectionvalue static int showoptiondialog(paraméterek) Paraméterek: parent, message, title, optiontype, messagetype, icon, options, initialvalue
45 JOptionPane osztály - Példa
46 JOptionPane osztály - Példa
Időzítő Timer 47 Adott időközönként (delay) egy ActionEvent eseményt bocsát ki és elküldi az őt hallgató objektumoknak Leállítható (stop) és újraindítható (start) Van egy kezdeti késleltetése A periódusos és a kezdeti késleltetés menet közben is állítható Egy időzítőhöz akárhány hallgató kapcsolható, és egy hallgató több időzítőt is hallgathat Esemény: ActionEvent
Időzítő Timer 48 Jellemzők int delay int initialdelay Konstruktor, metódusok Timer(int delay, ActionListener listener) void addactionlistener(actionlistener listener) void remove ActionListener(ActionListener listener) void start() void stop() void restart() boolean isrunning()
Időzítő Timer 49 Példa:
50 Időzítő Timer
51 Időzítő Timer
52 Időzítő Timer
53 Grafika
Rajzolás 54 Javában csak a grafikus felületre lehet rajzolni Minden komponenshez tartozik egy Graphics osztályú objektum java.awt.graphics: absztrakt osztály, amely tartalmazza a grafikus műveletekhez szükséges deklarációkat Egy komponens grafikus objektumát a rendszer hozza létre
Rajzolás komponensekre 55 Kétféle rajzolási lehetőség van: Lekérjük a grafikus felületet (getgraphics()) Újrarajzoláskor a rajz nem jelenik meg Felülírjuk a paintcomponent(graphics gr) metódusát Példa: A paintcomponent() metódust a rendszer automatikusan meghívja minden olyan esetben, amikor a felületet frissíteni kell (pld. elmozgatás, átméretezés) Jcomponent c = new Graphics gr = comp.getgraphics(); gr.drawline(10,20,100,20);
Rajzolás komponensekre 56 Példa: protected void paintcomponent(graphics gr) { super.paintcomponent(gr); gr.drawline(10,20,100,20); } Példa:
JComponent metódusok 57 Graphics getgraphics(): visszaadja a komponens grafikus felületét Protected void paintcomponent(graphics gr): itt adjuk meg a rajzoló utasításokat Void repaint(): újrarajzolja a komponenst. Akkor használjuk, ha az újrarajzolás szükségességét az operációs rendszer nem veheti észre
Graphics osztály 58 Egy Graphics objektum állapota: Komponens, amire rajzolunk Rajzolószín, betű Kivágási terület Eltolási pont Rajzolási mód: Felülíró XOR
Graphics osztály - Metódusok 59 setcolor(color c), getcolor() setfont(font f), getfont() setclip( ), getclipbounds() translate(x, y) setpaintmode(): felülíró rajzolás setxormode(color c): ha egy alakzatot kétszer kirajzolunk, visszakapjuk az eredeti alakzatot drawline(), drawstring() drawrect(), fillrect(), clearrect() drawoval(), filloval(), drawarc(), fillarc()
Graphics osztály - Metódusok 60 Példa:
61 Alacsony szintű események
Alacsony szintű események 62 Operációs rendszer szintjén történő elemi esemény Forrása csak komponens lehet ComponentEvent utódja Alacsony szintű AWT események: ComponentEvent: Komponensesemény ContainerEvent: Konténeresemény FocusEvent: Fókuszesemény WindowEvent: Ablakesemény KeyEvent: Billentyűzetesemény MouseEvent: Egéresemény
63 Alacsony szintű események
64 Alacsony szintű események
Komponensesemény - ComponentEvent 65 Példa:
Fókuszesemény - FocusEvent 66 Példa:
Billentyűesemény - KeyEvent 67 Példa:
Egéresemény - MouseEvent 68 Példa:
Egéresemény - MouseEvent 69 Példa:
Könyvészet 70 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.