java programozÁs - apache2 ubuntu default page: it workspallaszlo/java/eloadas/6.eloadas.pdf ·...

70
JAVA PROGRAMOZÁS 6.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

Upload: hoanghanh

Post on 22-Feb-2019

250 views

Category:

Documents


1 download

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 komponensek2

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

Nyomógomb – JButton9

� Feladat:

A gombok figyelőláncai10

Példa - Forráskód11

Példa - Forráskód12

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

Jelölőmező – Példa14

Jelölőmező – Példa15

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

Gombok csoportosítása – Példa18

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");

MVC modell21

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

JOptionPane osztály - Példa45

JOptionPane osztály - Példa46

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

Időzítő – Timer49

� Példa:

Időzítő – Timer50

Időzítő – Timer51

Időzítő – Timer52

Grafika53

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

Graphics osztály - Metódusok60

� Példa:

Alacsony szintű események61

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

Alacsony szintű események63

Alacsony szintű események64

Komponensesemény - ComponentEvent65

� Példa:

Fókuszesemény - FocusEvent66

� Példa:

Billentyűesemény - KeyEvent67

� Példa:

Egéresemény - MouseEvent68

� Példa:

Egéresemény - MouseEvent69

� Példa:

Könyvészet70

� 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.2011.