java programozÁs - apache2 ubuntu default page: it workspallaszlo/java/eloadas/6.eloadas.pdf ·...
TRANSCRIPT
JAVA PROGRAMOZÁS6.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda
6.ELŐADÁS
Swing komponensek; Grafika; Elemi események 2014-2015 tavasz
Swing konstansok – SwingConstantsinterfész
3
� Általános konstansokat deklarál
� Mindegyik: static int …
� Igazítások: TOP, BOTTOM, LEFT, RIGHT, CENTER, LEADING, TRAILINGLEADING, 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 – JLabel4
� 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� Jellemzők
� String text
� Icon icon
� int horizontalAlignmentint verticalAlignment
� int horizontalTextPositionint verticalTextPosition
Címke – JLabel5
� 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 őse6
� Gombszerű komponensek absztrakt őse:AbstractButton
+--JButton
+--JToggleButton
| +--JCheckBox
| +--JRadioButton
+--JMenuItem
� A gombok a ButtonGroup segítségével csoportbafoglalhatók
AbstractButton - A gombok őse7
� Események
� ActionEvent
� Jellemzők
� String text� String text
� Icon icon
� int mnemonic
� boolean selected
� String actionCommand
� Metódusok
� void doClick()
Nyomógomb – JButton8
� 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()
Jelölőmező – JCheckBox13
� 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
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 – ButtonGrouposztály
17
� Logikai csoportosítás
� A csoport gombjai közül egyszerre egy jelölhető be
� Csoport elemei: rádiógombok, AbstractButtonutó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()
Kombinált lista – JComboBox19
� Szerkeszthető szövegmező és legördülő lista kombinációja
� boolean popupVisible
� Object selectedItemint selectedIndex
� Konstruktorok� Események
� ActionEvent
� ItemEvent
� Jellemzők
� boolean editable
� int maximumRowCount
Konstruktorok
� JComboBox()
� JComboBox(Object[] items)
� JComboBox(Vector items)
Kombinált lista – JComboBox20
� Metódusok� void addItem(Object anObject)
void insertItemAt(Object anObject, int index)
� void removeItem(Object anObject)void removeItemAt(int anIndex)void removeItemAt(int anIndex)void removeAllItems()
� Példa:JComboBox cb = new JComboBox();
cp.add(cb);
cb.addItem("Erika");
cb.addItem("Margó");
cb.addItem("Mari");
Az MVC modell összetevői22
� 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� 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)
JTextField
JTextArea
(AbstractDocument)
PlainDocumentgetText JTextArea
ListModel addListDataListener
getElementAt
getSize
JList (AbstractListModel)
DefaultListModel
ListSelection
-
Model
addListSelectionListener
clearSelection
getSelectionMode
JList DefaultListSelection
-
Model
A szövegek őse – JTextComponent24
� Szövegkomponensek absztrakt őse:
JTextComponent
+--JTextField
| +--JPasswordField| +--JPasswordField
+--JtextArea
� Adatmodellje: Document
� Esemény
� DocumentEvent (adatmodellen)
A szövegek őse – JTextComponent25
� Jellemzők� Document doc
� String text
� Caret caretint caretPositionint caretPositionColor caretColor
� boolean editable
� int selectionStartint selectionEndColor selectionColorColor selectedTextColor
Szövegmező – JTextField26
� Beviteli mező
� Események
� ActionEvent
� DocumentEvent (adatmodellen, örökölt)� 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 – JTextArea27
� Többsoros beviteli mező
� Nincs görgetősávja; görgetés:
JTextArea ta = new JTextArea();
cp.add(new JScrollPane(ta));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 – JTextArea28
� Jellemzők (folyt.)
� int columnsint 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 – JTextArea29
� 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 – JList30
� 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 – JList31
� Jellemzők
� ListModel model (alapért.:DefaultListModel)
� int selectionModeLehetséges értékei (ListSelectionModel):SINGLE_SELECTION,SINGLE_SELECTION,SINGLE_INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION
� int selectedIndex
� int visibleRowCount
� int fixedCellWidthint fixedCellHeight
Lista – JList32
� Metódusok
� void setListData(Object[] listData)void setListData(Vector listData)
� void setSelectedValue(Object anObject, boolean shouldScroll)boolean shouldScroll)
� Object getSelectedValue()Object[] getSelectedValues()
� void setSelectedIndex(int index)int getSelectedIndex()
� void setSelectedIndices(int[] indices)int[] getSelectedIndices()
Lista – JList33
� Metódusok
� boolean isSelectedIndex(int index)boolean isSelectionEmpty()
� void clearSelection()
� int getFirstVisibleIndex()int getLastVisibleIndex()
� DefaultListModel osztály
� Vectorhoz hasonló
Menüsor – JMenuBar34
� Program funkcióinak csoportosítása
� Menühierarchia: � tetején: menüsor (JMenuBar)
� menüsor elemei: lebomló menük (JMenu)� 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 – JMenuBar35
� Menüsor (főmenü)� a keret tulajdona
� kerethez rendelés: setJMenuBar(JMenuBar mb)
� Menütételek� 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 – JMenuBar36
� Menüosztályok hierarchiájaJComponent
+--JMenuBar
+--AbstractButton
| +--JMenuItem
| | +--JCheckBoxMenuItem| | +--JCheckBoxMenuItem
| | +--JRadioButtonMenuItem
| | +--Jmenu
� Esemény:
� ActionEvent
� minden gombon keletkezik
� menütételeken kell lekezelni
Menüsor – JMenuBar37
� JMenuBar osztály
� JMenuBar()
� JMenu add(JMenu m)
� JMenu osztály� JMenu osztály
� JMenu(String text)JMenu()
� JMenuItem add(JMenuItem mi)
� void addSeparator() void insertSeparator(int index)
Menüsor – JMenuBar38
� JMenuItem osztály
� JMenuItem(String text, Icon icon)
� JMenuItem(String text, int mnemonic)
� örökölt jellemzők: text, icon, mnemonic, selected, � örökölt jellemzők: text, icon, mnemonic, selected, actionCommand
� boolean enabled
� Keystroke accelerator
� void doClick()
Menüsor – JMenuBar39
� Példa:JMenuBar mb; JMenu mFile;
setJMenuBar(mb=new JMenuBar());
mb.add(mFile=new JMenu("File"));
mb.add(new JMenu("Help"));mb.add(new JMenu("Help"));
mFile.add(new JMenuItem("Open"));
mFile.addSeparator();
mFile.add(new JMenuItem("Exit"));
Menüsor
MenükMenütételek(lehetnénekújabb menük is)
Menüszeparátor
Dialógusablak – JDialog40
� 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� 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 – JDialog41
� Jellemzők
� String title
� boolean modal
� boolean resizable� 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ály42
� 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)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ály43
� Dialóguskészítő metódusok paraméterei� Component parent
� Object message
� String title
int messageType� int messageType
� Icon icon
� int optionType
� Object[] selectionValuesObject initialSelectionValue
� Object[] optionsObject initialValue
JOptionPane osztály44
� 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, 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
Időzítő – Timer47
� Adott időközönként (delay) egy ActionEventesemé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� 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ő – Timer48
� 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()
Rajzolás54
� Javában csak a grafikus felületre lehet rajzolni
� Minden komponenshez tartozik egy Graphicsosztályú objektum
� java.awt.Graphics: absztrakt osztály, amely � 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 komponensekre55
� 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átFelülírjuk 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 komponensekre56
� Példa:protected void paintComponent(Graphics gr) {
super.paintComponent(gr);
gr.drawLine(10,20,100,20);
}}
� Példa:
JComponent metódusok57
� Graphics getGraphics(): visszaadja a komponens grafikus felületét
� Protected void paintComponent(Graphics gr): itt adjuk meg a rajzoló utasításokatadjuk 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ály58
� Egy Graphics objektum állapota:
� Komponens, amire rajzolunk
� Rajzolószín, betű
� Kivágási terület� Kivágási terület
� Eltolási pont
� Rajzolási mód:� Felülíró
� XOR
Graphics osztály - Metódusok59
� setColor(Color c), getColor()
� setFont(Font f), getFont()
� setClip(…), getClipBounds()
� translate(x, y)� 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()
Alacsony szintű események62
� 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