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 interfész 3
Á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:
A gombok figyelőláncai 10
Példa - Forráskód 11
Példa - Forráskód 12
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
Jelölőmező – Példa 14
Jelölőmező – Példa 15
Rádiógomb – JRadioButton, csoportosítás 16
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()
Gombok csoportosítása – ButtonGroup osztály 17
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()
Gombok csoportosítása – Példa 18
Kombinált lista – JComboBox 19
Szerkeszthető szövegmező és legördülő lista kombinációja
boolean
popupVisible Object selectedItem int selectedIndex
Konstruktorok
Események
JComboBox()
ActionEvent
JComboBox(Object[]
ItemEvent
items) JComboBox(Vector items)
Jellemzők boolean
editable int maximumRowCount
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");
MVC modell 21
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()
Modell interfészek,alapértelmezett modellek 23
Modell interfész
Metódusai (néhány)
Mi használja?
Alapértelm. osztály
Document
addDocumentListener getLength getText
(JTextComponent) (AbstractDocument) JTextField PlainDocument JTextArea
ListModel
addListDataListener getElementAt getSize
JList
(AbstractListModel) DefaultListModel
ListSelection addListSelectionListener JList clearSelection getSelectionMode Model
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 +--JMenuBar +--AbstractButton | +--JMenuItem | | +--JCheckBoxMenuItem | | +--JRadioButtonMenuItem | | +--Jmenu
Esemény:
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
JOptionPane osztály - Példa 45
JOptionPane osztály - Példa 46
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:
Időzítő – Timer 50
Időzítő – Timer 51
Időzítő – Timer 52
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
Felülírjuk
a rajz nem jelenik meg
a paintComponent(Graphics gr) metódusát
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)
Példa: 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
Alacsony szintű események 63
Alacsony szintű események 64
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.