Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

13 SwingA

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 50

Swing

JAVA

Osnovne osobine

Swing je paket klasa koje omoguavaju implementaciju grafikog korisnikog interfejsa u aplikacijama. Uveden je 1997. godine sa sledeim osobinama:

Swing komponente nadalje se bavimo ovim!


(tasteri, tabele, paneli, itd).

Look and Feel Support


(izgled Swing komponenti se moe menjati: ista aplikacija moe biti izvornog izgleda (Java) ili izgled npr. Windows okruenja).

Accessibility API
Korienje razliitih neuobiajenih tehnologija u radu sa aplikacijom.

Java 2DTM API (Java 2 Platform only)


Omoguava da se 2D eme, tekst i slike jednostavno ugrauju u aplikacije, odnosno aplete.

Drag and Drop Support (Java 2 Platform only)


Omoguava upotrebu drag and drop tehnologije izmeu Jave i drugih aplikacija.

JAVA

Swing komponente

Top-Level Containers (Kontejneri najvieg nivoa)

Komponente koje se nalaze na vrhu hijerarhije sadraja Swinga.

JAVA

Swing komponente

General-Purpose Containers (Kontejneri opte namene)

Meukontejner koji se moe koristiti pod razliitim uslovima.

JAVA

Swing komponente

Special-Purpose Containers (Kontejneri specijalne namene)

Kontejneri koji imaju specifiu ulogu u UI.

JAVA

Swing komponente

Basic Controls (Osnovne kontrole)

Komponete ija je prvenstvena namena da primaju informacije od korisnika.

JAVA

Swing komponente

Uneditable Information Displays (Prikaz informacija koje se ne mogu menjati)

Komponente koje postoje jedino da bi dale korisniku odreene informacije.

JAVA

Swing komponente

Interactive Displays of Highly Formatted Information

Komponente koje prikazuju informacije koje mogu biti izmenjene od strane korisnika (ako tako odabere).

JAVA

Windows look and feel

JAVA

Motif Look and Feel

JAVA 10

Java Look and Feel

JAVA 11

Prvi Swing program

Najjednostavnija Swing aplikacija koju moete da napiete. Program sam po sebi ne radi mnogo, ali prikazuje osnovni kod u svakom Swing programu:

Importovanje (uvoz) paketa koji su neophodni. Postavljanj kontejnera najvieg nivoa.

import javax.swing.*; public class HelloWorldSwing { public static void main(String[] args) { JFrame frame = new JFrame("HelloWorldSwing"); final JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }

JAVA 12

Objanjenje Swing programa

U prvoj liniji koda uvozi se glavni Swing paket: import javax.swing.*; . Ovo je jedini paket koji je u ovom programu potreban. Veina Swing programa mora da uveze dva AWT paketa, import java.awt.*; import java.awt.event.*; . Oni su neophodni jer Swing komponente koriste AWT infrastrukturu, ukljuujui AWT event model. Event model upravlja kako komponente reaguju na dogaaj, npr. klik na mia, ili pomeranje mia. Svaki program sa Swing GUI mora da sadri najmanje jedan Swing kontejner najvieg nivoa. Postoje tri kontejnera najvieg nivoa JFrame, JDialog i JApplet.

JAVA 13

Kontejner najvieg nivoa (top-level)

U primeru HelloWorldSwing postoji samo jedan top-level kontejner, a to je JFrame. Prozor (frame), primenjen kao jedna instanca klase JFrame, je prozor koji ima detalje, kao npr. naslov, okvir, taster za minimiziranje i zatvaranje prozora. Aplikacije sa GUI uobiajeno imaju najmanje jedan frejm. Deo koda koji postavlja i prikazuje prozor: JFrame frame = new JFrame("HelloWorldSwing"); ... frame.pack(); frame.setVisible(true);

JAVA 14

Postavljanje komponenti

HelloWorldSwing ima jednu komponentu, labelu sa tekstom "Hello World. Sledee dve linije koda stvaraju, a zatim dodaju komponentu u okvir:

final JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label);

JAVA 15

Zatvaranje prozora...

Kako bi zatvorili prozor kada se klikne na taster za zatvaranje neophodan je sledei deo koda:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JFrame obezbeuje metod setDefaultCloseOperation kako bi konfigurisao podrazumevane (default) dogaaje kada korisnik klikne na taster za zatvaranje prozora. U ovom sluaju prekida se izvravanje aplikacije nakon zatvaranja prozora.

JAVA 16

Swing komponente i hijerarhija sadraja drugi primer

Koristimo program SwingApplication da prikaemo neke najee koriene komponente u GUI i kako se se meusobno uklapaju u hijerarhiji sadraja. Aplikacija koristi etiri najee primenjivane komponente:

frejm, ili glavni prozor (JFrame) panel, ponekad se zove i pane (JPanel) taster (JButton) labela (JLabel)

JAVA 17

Zadaci pri kreiranju Java aplikacije


1. 2. 3. 4. 5. 6. 7.

Importovanje Swing paketa Definisanje look and feel-a Podeavanje top-level container-a Podeavanje tastera, labela itd. Postavljane komponenti u kontejner Definisanje okvira oko komponenti Reagovanje na dogaaje (Handling events)

JAVA 18

Hijerarhija

Frejm je tzv. top-level kontejner. Na njega se postavljaju ostale Swing komponente (pored ovoga postoje i top-level kontejneri JDialog i JApplet). Panel kontejner je srednji sloj. Zadatak mu je da olaka postavljanje tastera, labela itd. Pored ovog postoje i sledei kontejneri JScrollPane, JTabbedPane. Tasteri i labele ine tzv. atomic components samostalni entiteti koji prema korisniku mogu da znae neku informaciju. esto se koriste i za unos podataka. Swing API ima jo nekoliko komponenti, npr. JComboBox, JTextField, JTable itd. Sledi dijagram hijerarhije sadraja (containment hierarchy ) aplikacije SwingApplication:

JAVA 19

Dijagram hijerarhije sadraja SwingApplication aplikacije

JAVA 20

O hijerarhiji ...

Sledi kod koji dodaje tastere i labele na panel, a zatim panel u glavni kontejner:

frame = new JFrame(...); button = new JButton(...); label = new JLabel(...); pane = new JPanel(); pane.add(button); pane.add(label); frame.getContentPane().add(pane, borderLayout.CENTER);

JAVA 21

Podeavanje izgleda i funkcionisanja aplikacije -Look and feel

Swing nudi mogunost definisanja izgleda i funkcionisanja komponenata, odnosno naina na koji se tasteri, obeleja i ostali elementi GUI prikazuju na ekranu. Upravljanje nainom prikazivanja komponenata obavlja UIManager, klasa za upravljanje korisnikim interfejsom u javax.swing paketu.

Na Windows XP platformi mogue je izabrati jedan od sledeih izgleda:


Windows izgled Windows classic izgled Motif X Window system izgled Metal, standardni Swing izgled Java aplikacija u sluaju razliitih platformi.

JAVA 22

Podeavanje izgleda i funkcionisanja

U sledeem kodu, prikazano je kako se u Swing aplikaciji odreuje stil kojim e komponente biti prikazane:

public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } ... //Create and show the GUI... }

Obeleeni deo koda zapravo kae: ne interesuje me koji je izgled korisnik odabrao, koristi Java prikaz (the Java look and feel).".

Izgled OS-a: getSystemLookAndFeelClassName


Sun preporuuje primenu sledeeg Windows izgleda: UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

JAVA 23

Primer izgleda Java i Windows

JAVA 24

Podeavanje kontejnera najvieg nivoa


public class SwingApplication extends JFrame implements ActionListener { ... public static void main(String[] args) { JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }
JAVA 25

Podeavanje tastera i labela

Kod koji inicijalizuje taster:


JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(...create an action listener...);

Prvi red kreira taster. Drugi red postavlja da ALT+I bude preica za aktiviranje tastera. Trei red omoguava reagovanje tastera na dogaaje.

JAVA 26

Podeavanje tastera i labela


...//deklarisanje promenljivih koje se koriste:
private static String labelPrefix = "Number of button clicks: ; private int numClicks = 0;

... //podeavanje labele: final JLabel label = new JLabel(labelPrefix + "0 ");

JAVA 27

Dodavanje komponenti u kontejner


SwingApplication grupie labele i tastere u kontejner (JPanel) i nakon toga ih dodaje u frejm, kao top-level kontejner. Sledi kod koji inicijalizira panel:

JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30)); pane.setLayout(new GridLayout(0, 1)); pane.add(button); pane.add(label);

Prvi red kreira panel. Drugi red dodaje okvir. Trei red kreira layout manager koji pokuava da sadraj panela postavi u jednu kolonu. Na kraju se labela i taster dodaju panelu.
JAVA 28

Dodavanje okvira oko komponenti

Deo koda koji dodaje okvir (border) panelu:

pane.setBorder(BorderFactory.createEmptyBorder( 30, //top 30, //left 10, //bottom 30) //right );

Ovaj okvir obezbeuje prazan prostor oko sadraja panela, -- 30 piksela na vrhu, levo, desno i 10 piksela na dnu. Okviri su osobina koju JPanel nasleuje od klase JComponent.

JAVA 29

Reagovanje na dogaaje

Svaki put kada korisnik ukuca neko slovo ili klikne na mia, odigra se jedan dogaaj. Svaki objekat moe biti obaveten o dogaaju. Sve to treba da uradi jeste da primeni odgovarajui interfjes i da se registruje kao event listener u odgovarajuem izvoru dogaaja (event source). Swing komponente mogu da stvore mnogo vrsta dogaaja.

JAVA 30

Reagovanje na dogaaje

SwingApplication primer ima samo jedan objekat koji reaguje na dogaaje (action events):

button.addActionListener (this); ... public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); }

JAVA 31

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingApplication extends JFrame implements ActionListener { private static String labelPrefix = "Number of button clicks: "; private int numClicks = 0; final JLabel label = new JLabel(labelPrefix + "0 "); JButton button = new JButton("I'm a Swing button!"); public Component createComponents() { button.setMnemonic(KeyEvent.VK_I); button.addActionListener(this); JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder(30,30,10,30)); pane.setLayout(new GridLayout(0, 1)); pane.add(button); pane.add(label); return pane; } public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); } public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); JAVA } }

32

Definisanje rasporeda elemenata interfejsa (Layout Management)

Layout management je proces koji odreuje veliinu i poziciju komponenti. U Java platformi standardni layout manageri su: BorderLayout, BoxLayout, FlowLayout, GridBagLayout i GridLayout. Olakavaju dizajn GUI aplikacije. Vode rauna o poziciji i veliini komponenti u prozoru. Korisni su u sistemima gde se veliina displeja menja.

JAVA 33

FlowLayout
Podrazumevani je za Panel, JPanel, i za Applet Ono to zna:

Menja veliinu komponenti Komponente postavlja u redove, poev od gorenjeg levog ugla na desno, pa dole Elementi u redovima su podrazumevano centrirani

Konstruktori FlowLayout()

Stavlja elemente u redove a izmeu elemenata i redova ostavlja 5 pixela razmaka.


Razmak je i dalje 5 pixela, ali poravnanje moe da bude: FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER Moe se podesiti poravnjanje i razmak izmeu elemenata (horizontalno i vertikalno)

FlowLayout(int alignment)

FlowLayout(int alignment, int hGap, int vGap)

JAVA 34

FlowLayout primer
public class FlowTest extends Applet { public void init() { setLayout(new FlowLayout()); for(int i=1; i<6; i++) { add(new Button("Button " + i)); } } }

JAVA 35

BorderLayout

Podrazumevani menader za Frame, JFrame, Dialog, JApplet

ono to zna
Deli kontejner na 5 delova Svaki deo se identifikuje imenom: NORTH, SOUTH, EAST, WEST i CENTER

Ovaj menader dozvoljava samo 5 komponenti

JAVA 36

BorderLayout (nastavak)

Konstruktori

BorderLayout()
Izmeu komponenti nema razmaka

BorderLayout(int hGap, int vGap)


Moe se definisati razmak izmeu komponenti (u pixelima)

Dodavanje komponenti

add(component, BorderLayout.REGION) Potrebno je uvek definisati deo u koji se postavlja komponenta

JAVA 37

BorderLayout: primer
public class BorderTest extends Applet { public void init() { setLayout(new BorderLayout()); add(new Button("Button 1"), BorderLayout.NORTH); add(new Button("Button 2"), BorderLayout.SOUTH); add(new Button("Button 3"), BorderLayout.EAST); add(new Button("Button 4"), BorderLayout.WEST); add(new Button("Button 5"), BorderLayout.CENTER); } }

JAVA 38

GridLayout
ta zna Deli prozor u zavisnoti od broja redova i kolona na na pravougaonike iste veliine Elementi se postavljaju sleva na desno, od gore na dole Zanemaruje se originalna veliina komponenti i veliina im se menja kako bi odgovarala veliini elije u koju treba da se smesti

JAVA 39

GridLayout
Konstruktor GridLayout() Jedan red sa onoliko kolona koliko je komponenata GridLayout(int rows, int cols) Deli prozor na specificirani broj redova i kolona GridLayout(int rows, int cols, int hGap, int vGap) definie se razmak izmeu elija

JAVA 40

GridLayout primer
public class GridTest extends Applet { public void init() { setLayout(new GridLayout(2,3)); // 2 reda, 3 kolone add(new Button("Button One")); add(new Button("Button Two")); add(new Button("Button Three")); add(new Button("Button Four")); add(new Button("Button Five")); add(new Button("Button Six"));

JAVA 41

Reagovanje na dogaaje

JAVA 42

Primer:Listener interfejs
import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CircleDrawer2 extends Applet implements MouseListener { private int radius = 25; public void init() { setForeground(Color.BLUE); addMouseListener(this); }

JAVA 43

Primer: Listener interfejs


public void mouseEntered(MouseEvent event) {} public void mouseExited (MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) {} public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius,event.getY()-radius, 2*radius, 2*radius); } }

JAVA 44

Standardni AWT Event Listeners (pregled)

JAVA 45

Standard AWT Event Listeners

ActionListener

Obrauje dugmad i nekoliko drugih dogaaja actionPerformed(ActionEvent event) primenjuje se na skrolovanje


adjustmentValueChanged(AdjustmentEvent event)

AdjustmentListener

ComponentListener

Reaguje na pomeranje/promenu dimenzija/skrivanje GUI objekata


componentResized(ComponentEvent event) componentMoved (ComponentEvent event) componentShown(ComponentEvent event) componentHidden(ComponentEvent event)
JAVA 46

Standard AWT Event Listeners...

ContainerListener

Aktivira se kada se prozor doda/pomeri GUI kontrole


componentAdded(ContainerEvent event) componentRemoved(ContainerEvent event)

FocusListener

Otkriva kada kontrola dobije/izgubi fokus na tastaturu


focusGained(FocusEvent event) focusLost(FocusEvent event)

JAVA 47

Standard AWT Event Listeners...

ItemListener

reaguje na izbore u listama, poljima za potvrdu (checkboxes), itd.


itemStateChanged(ItemEvent event)

KeyListener

Reaguje na dogaaje na tastaturi


keyPressed(KeyEvent event) pritisnut bilo koji taster keyReleased(KeyEvent event) osloboen bilo koji taster keyTyped(KeyEvent event) osloboen taster karaktera koji moe da se tampa

JAVA 48

Standardni AWT Event Listeners

MouseListener

Primenjuje se na osnovne dogaaje sa miem


mouseEntered(MouseEvent event) mouseExited(MouseEvent event) mousePressed(MouseEvent event) mouseReleased(MouseEvent event) mouseClicked(MouseEvent event)
Ostvaruje se bez prevlaenja. Ne treba da se koristi za mousePressed! Applies on release if no movement since press

MouseMotionListener

reaguje na pomeranje mia


mouseMoved(MouseEvent event) mouseDragged(MouseEvent event)

MouseInputListener

kombinacija MouseListener i MouseMotionListener


u javax.swing.event paketu, ne u java.awt.event Potrebno je da se pozovu oba i addMouseListener i addMouseMotionListener

JAVA 49

Standard AWT Event Listeners...

TextListener

Primenjuje se na tekstualna polja i oblasti teksta (text fields and text areas)
textValueChanged(TextEvent event)

WindowListener

Reaguje na dogaaje u prozoru najvieg nivoa


windowOpened, windowClosing, windowClosed, windowIconified, windowDeiconified, windowActivated, windowDeactivated

JAVA 50

You might also like