semin r java - gui -- jfc/swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · graficke...

22
Semin ´ r Java GUI – JFC/Swing Radek Koˇ ı Fakulta informaˇ cn´ ıch technologi´ ı VUT rezen 2008 Radek Koˇ ı Semin ´ r Java – GUI (JFC/Swing) 1/ 22

Upload: others

Post on 24-Dec-2019

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Seminar JavaGUI – JFC/Swing

Radek Kocı

Fakulta informacnıch technologiı VUT

Brezen 2008

Radek Kocı Seminar Java – GUI (JFC/Swing) 1/ 22

Page 2: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Graficke uzivatelske rozhranı

Swing

nove GUI dostupne od verze 1.2.x

soucast JFC (Java Foundation Classes)

konecna verze GUI pro Javu

AWT (Abstract Window Toolkit)

starsı varianta dostupna od verze 1.x.x

od verze 1.1.x udalostne rızena

omezene moznosti

Radek Kocı Seminar Java – GUI (JFC/Swing) 2/ 22

Page 3: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Graficke uzivatelske rozhranı

Balıcky

java.awt – zakladnı komponenty AWT GUI

java.awt.event – udalosti AWT GUI

+ dalsı balıky v java.awt

javax.swing – zakladnı komponenty Swing GUI

javax.swing.event – udalosti komponenty Swing GUI

+ dalsı balıky v javax.swing

Radek Kocı Seminar Java – GUI (JFC/Swing) 3/ 22

Page 4: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Graficke uzivatelske rozhranı

Rızenı programu udalostmi

obecnejsı pojem oznacujıcı typ asynchronnıhoprogramovanı

zakladnı princip tvorby GUI

tok programu je rızen udalostmi (zpracovanı udalostıurcuje beh aplikace)

udalostnı aplikace by mely byt programovany jakovıcevlaknove

Radek Kocı Seminar Java – GUI (JFC/Swing) 4/ 22

Page 5: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Tvorba GUI

Komponenty GUI

graficke (uzivatelske) elementy – tabulka, text, . . .

graficke kontejnery

Zakladnı prıstup

udalostnı rızenı

kontejnery obsahujı elementy a/nebo jine kontejnery

vzhled GUI je dan zpusobem poskladanı grafickychelementu a kontejneru

http://java.sun.com/docs/books/tutorial/uiswing/components/

Radek Kocı Seminar Java – GUI (JFC/Swing) 5/ 22

Page 6: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Ukazka Swing aplikace

public class HelloWorld {public static void main(String[] args) {// vytvoreni okna aplikaceJFrame okno = new JFrame("Hello World");

// vytvoreni textu a vlozeni do oknaJLabel text = new JLabel("Nazdarek ...");okno.getContentPane().add(label);

// implicitni operace pri zavreni oknaokno.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);// otevreni oknaokno.pack();okno.setVisible(true);

}}

Radek Kocı Seminar Java – GUI (JFC/Swing) 6/ 22

Page 7: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Rozmıstenı komponent

Rozmıstenı komponent

komponenty se vkladajı do grafickych kontejneru

umıstenı komponenty nenı dano absolutnı polohou

umıstenı komponenty je vztazeno relativne ke kontejneru,ve kterem je vlozenazpusob umıstenı je dan spravcem umıstenı

velikost, tvar a rozmıstenı zavisı na typu spravcezalezı na poradı vlozenı (add())

Radek Kocı Seminar Java – GUI (JFC/Swing) 7/ 22

Page 8: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Spravce rozmıstenı

Nastavenı spravce rozmıstenı

v konstruktoru pri vytvarenı kontejneruconverterPanel =

new JPanel(new GridLayout(2, 2));

metodou setLayout() kontejneruJFrame okno =

new JFrame("Hello World application");

okno.getContentPane().setLayout(new FlowLayout());

Radek Kocı Seminar Java – GUI (JFC/Swing) 8/ 22

Page 9: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Spravce rozmıstenı

FlowLayout

komponenty jsou ukladany zleva doprava na jeden radek

pri zaplnenı radku se prechazı na novy radek

implicitnı

GridLayout

komponenty jsou ukladany do mrızky (tabulky)

komponenty jsou ukladany zleva doprava a shora dolu dobunek mrızky

pocet sloupcu a radku se urcuje v konstruktoru

mrızka je rovnomerna

Radek Kocı Seminar Java – GUI (JFC/Swing) 9/ 22

Page 10: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Spravce rozmıstenı

GridBagLayout

nejmocnejsı (take nejslozitejsı) spravce umıstenı

o umıstenı prvku muzeme rozhodovat naprosto volne

vyuzıvan predevsım pri automatickem generovanı kodu(RAD nastroje)

BoxLayout

vychazı z GridLayout

umoznuje vodorovne nebo svisle umıstenı

umoznuje nastavit roztece (mechanizmus ”rozpery a tmel”)

Radek Kocı Seminar Java – GUI (JFC/Swing) 10/ 22

Page 11: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Spravce rozmıstenı

BorderLayout

implicitne umistuje komponenty na stred a roztahuje nacelou velikost kontejnerulze definovat oblast vlozenı v prepsane metode add()

BorderLayout.NORTHBorderLayout.SOUTHBorderLayout.EASTBorderLayout.WESTBorderLayout.CENTER (implicitnı)

Bez spravce

setLayout(null)

Radek Kocı Seminar Java – GUI (JFC/Swing) 11/ 22

Page 12: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Udalostnı programovanı

Rızenı programu udalostmi

udalost vznika obvykle uzivatelskou akcı (kliknutı, zmenapolohy mysi, . . . )

udalost muze vzniknout v libovolne komponente GUI

kazda komponenta ma definovaneho ”posluchace”(listener) udalostı

pri vyvolanı udalosti zasle system zpravu posluchaci – tenudalost zpracuje

Radek Kocı Seminar Java – GUI (JFC/Swing) 12/ 22

Page 13: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

GUI – typy udalostı

Udalosti lze rozdelit podle uzivatelske akce nad

oknem – WindowEvent

klavesnicı – KeyEvent

mysı (klikanı, pohyb) – MouseEvent

fokusem (zıskanı, ztrata) – FocusEvent

GUI (obecna akce, napr. stisk tlacıtka) – ActionEvent

. . . (viz java.awt.event a java.swing.event)

Radek Kocı Seminar Java – GUI (JFC/Swing) 13/ 22

Page 14: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Udalostnı programovanı

Posluchac udalostı

objekt, jehoz trıda implementuje prıslusne rozhranı

Rozhranı posluchacu udalostı

ActionListener (awt)

MouseListener (awt)

MouseMotionListener (awt)

MouseInputListener (swing)

. . . (viz java.awt.event a java.swing.event)

Radek Kocı Seminar Java – GUI (JFC/Swing) 14/ 22

Page 15: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Udalostnı programovanı

Pridanı posluchace udalostı

komponenta musı registrovat posluchace udalostı, abyprıslusna udalost mohla byt osetrenakazda komponenta knihovny Swing obsahuje

metodu addXXXListener()metodu removeXXXListener()kde XXX reprezentuje nazev udalosti (Mouse, ...)

napr. addActionListener(ActionListenerlistener)

Radek Kocı Seminar Java – GUI (JFC/Swing) 15/ 22

Page 16: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Udalostnı programovanı

Implementace posluchace udalostı

anonymnı trıda

vnitrnı trıda

top-level trıda

Radek Kocı Seminar Java – GUI (JFC/Swing) 16/ 22

Page 17: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Udalostnı programovanı

class myActionListener implements ActionListener {public void actionPerformed(ActionEvent event) {

...}

}

...convertTemp = new JButton("Convert");convertTemp.

addActionListener(new MyActionListener());...

Radek Kocı Seminar Java – GUI (JFC/Swing) 17/ 22

Page 18: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Rozsırenı komponent

java.awt.Componentjava.awt.Container

java.swing.JComponent

Trıda JComponent

metoda void paintComponent(Graphics g)

metoda void repaint()

Radek Kocı Seminar Java – GUI (JFC/Swing) 18/ 22

Page 19: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

GUI a paralelismus

button.addActionListener(new DoSomething());

class DoSomething implements ActionListener {public void actionPerformed(ActionEvent event) {try {Thread.sleep(10000);

} catch (InterruptedException e) {}}

}

Radek Kocı Seminar Java – GUI (JFC/Swing) 19/ 22

Page 20: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

GUI a paralelismus

class DoSomething implements ActionListener {public void actionPerformed(ActionEvent event) {Runnable r = new Runnable() {public void run() {

label.setText("Time consuming operation");try {Thread.sleep(10000);

} catch (InterruptedException e) {}label.setText("");

}};new Thread(r).start();

}}

Radek Kocı Seminar Java – GUI (JFC/Swing) 20/ 22

Page 21: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

GUI a paralelismus

public static void main(String[] args) {//Schedule a job for the event-dispatching thread//creating and showing this application’s GUI.javax.swing.SwingUtilities.

invokeLater(new Runnable(){public void run() {createAndShowGUI();

}});

}

Radek Kocı Seminar Java – GUI (JFC/Swing) 21/ 22

Page 22: Semin r Java - GUI -- JFC/Swingperchta.fit.vutbr.cz/vyuka-java/uploads/12/gui.pdf · Graficke uzˇivatelsk´ e rozhran´ı´ Swing nove GUI dostupn´ e od verze 1.2.x´ soucˇast

Reference

http://java.sun.com/docs/books/tutorial/uiswing/learn/

Radek Kocı Seminar Java – GUI (JFC/Swing) 22/ 22