You are on page 1of 135

Java Swing kontrole

JAVA
1
Swing komponente

Kontejner najvieg nivoa


Java Applet, Dialog, Frame
Kontejneri opte namene
Panel, Scroll pane, Toolbar, Tabbed pane, Split pane
Kontejneri specijalne namene
Internal frame, Layered pane, Root pane
Osnovne kontrole
Buttons, Combo box, List, Menu, Slider, Spinner, Text field ili
Formatted text field

JAVA
2
Kontejneri najvieg nivoa
Dialog

JAVA
3
Dialog (JOptionPane)

U Java GUI aplikacijama esto se koristi poruka (dialog).


Dijalozi omoguavaju prikaz poruke korisniku i primanje
povratne informacije.
Moe se koristiti za prikaz poruke o greki, dati opis
potencijalnih problema ili dati prikaz rezultata nekog
izraunavanja.
Postoje etiri vrste dijaloga:
showMessageDialog, showOptionDialog, showConfirmDialog i
showInputDialog
Dialog pripada Java Swing JOptionPane klasi

JAVA
4
Konstante (members)

U prozoru dijaloga konstante odreuju koji tip ikone se javlja


kao i koji tasteri, u zavisnoti od toga koja vrsta poruke eli
da se prikae.
npr. u prozoru showMessageDialog postoji samo jedan OK taster i
nema potrebe definisati ostale tastere.
Sledi prikaz konstanti za tastere i ikone koje se koriste u
formiranju poruke.

JAVA
5
Tasteri (buttons)

Za tastere su definisane sledee konstante:


Member (konstanta) Opis
DEFAULT_OPTION prikazuje se OK taster
OK_CANCEL_OPTION prikazuju se OK i Cancel tasteri
YES_NO_CANCEL_OPTION prikazuju se Yes, No i Cancel tasteri
YES_NO_OPTION prikazuju se Yes i No tasteri
Sintaksa: JOptionPane.Member
Primer: JOptionPane.DEFAULT_OPTION

JAVA
6
Ikone (icons)

Kako bi se prikazale ikone, definisane su sledee konstante:


Member (konstanta) Opis
PLAIN_MESSAGE bez ikone
INFORMATION_MESSAGE ikona informacija
ERROR_MESSAGE ikona greke
WARNING_MESSAGE ikona znak uzvika
QUESTION_MESSAGE ikona znak pitanja
Sintaksa: JOptionPane.Member
Primer: JOptionPane.ERROR_MESSAGE

JAVA
7
showMessageDialog

showMessageDialog je modalni dijalog sa jednim tasterom (OK).


Jednostavno se moe definisati koja poruka treba da se prikae, ikona i
naslov.

poruka (message)

naslov (title)

ikona (icon) taster (button)


JAVA
8
Jedan primer

JOptionPane.showMessageDialog(this,"1. plda-
hiba!","A",JOptionPane.ERROR_MESSAGE);

JOptionPane.showMessageDialog(this,"2. plda-
informci!","B",JOptionPane.INFORMATION_MES
SAGE);

JAVA
9
Jedan primer nastavak...

JOptionPane.showMessageDialog(this,"3. plda-
figyelmeztets!","C",JOptionPane.WARNING_MES
SAGE);

JOptionPane.showMessageDialog(this,"4. plda-
krds!","D",JOptionPane.QUESTION_MESSAGE);

JAVA
10
Jedan primer nastavak...

JOptionPane.showMessageDialog(this,"5. plda-
hiba!","E",JOptionPane.PLAIN_MESSAGE);

JAVA
11
Confirm Dialog (JOptionPane)
poruka (message)

naslov (title)

Ikona (icon) tasteri (buttons)

JAVA
12
Confirm Dialog (JOptionPane)

Da bi se confirm dialog box prikazao koristi se showConfirmDialog


metod.
Moe se primeniti na nekoliko naina (overload)
JOptionPane.showConfirmDialog(null, message);
JOptionPane.showConfirmDialog(null, message, title, buttons);
JOptionPane.showConfirmDialog(null, message, title, buttons,
icon);
U ovoj implementaciji ako se icon izostavi, prikazuje se znak pitanja.
Ako se izostavi buttons, prikazuju seYes, No, Cancel tasteri.
Ako se izostavi title, ispisuje se Select an Option.
Prvi argument (null) mora se navesti on ukazuje da je confirm dialog box
pridruen trenutnom prozoru.
Nema ogranienja koliko poruka moe da bude dugaka. Ako je poruka
predugaka moe se koristiti karakter za prelazak u novi red (\n) kako bi se
razdvojila na vie redova.

JAVA
13
showOptionDialog metod

Kada se pozove showOptionDialog metod, metod vraa


JOptionPane celobrojnu konstantu koja ukazuje na odgovor
korisnika.
Member (lan) Opis
CLOSED_OPTION prozor zatvoren bez aktiviranja tastera
OK_OPTION selektovan je bio OK taster
YES_OPTION selektovan je bio Yes taster
NO_OPTION selektovan je bio No taster
CANCEL_OPTION selektovan je bio Cancel taster

JAVA
14
Primer:

int response;
response = JOptionPane.showConfirmDialog(null, "This is an example of
an confirm dialog box.", "Example", JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE);
if (response == JOptionPane.YES_OPTION)
{
// odabrano je Yes
}
else if (response == JOptionPane.NO_OPTION)
{
// odabrano je No
}
else
{
// prozor je zatvoren bez klika na tastere
}

JAVA
15
showOptionDialog

Tasteri, ikona, poruka i naslov prozora mogu da se menjaju.

JAVA
16
showOptionDialog primer

// tekst ispisan tasterima


String[] opcije = {U redu", Problem!"};

JOptionPane.showOptionDialog(null,
Tekst ...",Naslov...",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
new ImageIcon("smalllogo.gif"), //(mesto)+ime slike
opcije, //natpisi na tasterima
opcije[1] //pokazuje koji je taster default
);

JAVA
17
showOptionDialog

Provera upita ne zavisi od natpisa na tasterima:


int r=JOptionPane.showOptionDialog(.);
if (r==JOptionPane.YES_OPTION)
// kod ako je kliknuto na U redu
else
//kod ako je kliknuto na Problem!
JAVA
18
showInputDialog unos
podataka (prvi primer)
String zbirStr =
JOptionPane.showInputDialog(null,
Koliko je 3+2?","Matematika",
JOptionPane.QUESTION_MESSAGE);

//obrada unetih podataka


try {
int zbir = Integer.parseInt(zbirStr);
}
catch (Exception ex) {
} JAVA
19
showInputDialog unos
podataka (drugi primer)
Object[] opcije = {sunkom", sirom", pecurkama"};
String s = (String)JOptionPane.showInputDialog(
this,
Dovrsite recenicu:\n"
+ Volim kajganu sa ",
Dijalog sa opcijama",
JOptionPane.PLAIN_MESSAGE,
null, //bez ikone
opcije,
sunkom");
//ako dobijemo string
if ((s != null) && (s.length() > 0)) {
setTitle(Volim kajganu sa... " + s + "!");
return;
}
//ako ne dobijemo nista
setTitle(Kliknuto je na Cancel!");

JAVA
20
JAVA
21
Ako izostavimo opcije, i na to mesto stavimo null dobijamo
sledeu formu:

JAVA
22
Kod prethodnog primera:

import javax.swing.*;
import java.awt.*;

public class Dialog extends JFrame {


public Dialog() {
setTitle("Dijalozi");
setBounds(200,100,400,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
show();
// a)
JOptionPane.showMessageDialog(this,"Mesto za
tekst.","Naslov",JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(this,"Bez ikone","",JOptionPane.PLAIN_MESSAGE);

// b)
// confirm dialog
JOptionPane.showConfirmDialog(this,"Ovde treba da je pitanje");

if (JOptionPane.showConfirmDialog(null,"Ovde treba da je pitanje","Naslov1",


JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION)
{//
}

JAVA
23
if (JOptionPane.showConfirmDialog(this,"Pitanje?","...",

JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.NO_OPTION)
{//
}
// c)
String[] opciok = {"U redu", "Problem!"};

int r=JOptionPane.showOptionDialog(null,"Tekst ...",


"Natpis...",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,
new ImageIcon("smalllogo.gif"),opciok,opciok[1]);
if (r==JOptionPane.YES_OPTION)
JOptionPane.showMessageDialog(null,"Kliknuto je na U
redu","",JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(this,"Kliknuto je na
Problem!","",JOptionPane.INFORMATION_MESSAGE);

JAVA
24
// d)
String osszegStr = JOptionPane.showInputDialog(null,
"Koliko je 3+2?","Matematika",
JOptionPane.QUESTION_MESSAGE);

try {
int osszeg = Integer.parseInt(osszegStr);

}
catch (Exception ex) {
}

Object[] valasztek = {"sunkom", "sirom", "pecurkama"};


String s = (String)JOptionPane.showInputDialog(
this,
"Dovrsite recenicu:\n"
+ "Volim kajganu sa ",
"Dijalog sa opcijama",
JOptionPane.PLAIN_MESSAGE,
null,
valasztek,
"sunkom");

JAVA
25
//ako dobijemo string
if ((s != null) && (s.length() > 0)) {
setTitle("Volim kajganu sa... " + s + "!");
return;
}
//ako ne dobijemo nista nazad
setTitle("Kliknuto je na Cancel!");
}
public static void main(String[] args) {
new Dialog();
}
}

JAVA
26
JFrame Object

Prozor (frame) je objekat u kome se gradi korisnikov


interfejs. To je objekat kontejner poto se unutar njega
nalaze ostale kontrole. Jedna od osobina kontejner objekta
(container object) je da ako je njegova osobina visible
podeena na false, sve ostale kontrole koje sadri postaju
nevidljive.

JAVA
27
JFrame Object- osobine, metode
i dogaaji
Osobine (properties) opisuju izgled i vrednosti kontrole,
metodi (methods) su akcije koje mogu da se primene na
kontrole, a dogaaji (events) nastaju kada se neto uradi
kontroli (npr. klikne na kontrolu), najee od strane
korisnika.

JAVA
28
Osobine (properties)

title naslov prozora.


font ime, stil i veliina fonta.
background boja pozadine.
foreground boja teksta ili grafike.
x rastojanje od leve ivice ekrana do leve ivice prozora
izraeno u pikselima.
y rastojanje od vrha ekrana do vrha prozora izraeno u pikselima.
width irina prozora u pikselima.
height visina prozora u pikselima.
resizable logika (Boolean) vrednost koja ukazuje da li je prozor fiksne
veliine ili mu se mogu menjati dimenzije.
visible ako je false, prozor nije vidljiv (kao i sve njegove kontrole).

JAVA
29
Metode

setTitle postavlja naslov prozora.


setFont postavlja ime, stil i veliinu fonta.
setBackground postavlja boju pozadine prozora.
setForeground postavlja boju teksta i grafike.
getX daje rastojanje od leve ivice ekrana do leve ivice prozora
izraeno u pikselima.
getY daje rastojanje od vrha ekrana do vrha prozora izraeno u
pikselima.
getWidth daje irinu prozora u pikselima.
getHeight daje visinu prozora u pikselima.
setBounds koristi se za pozicioniranje prozora na ekranu.
setResizable postavlja logiku vrednost koja ukazuje na to da li je prozor fiksne
veliine ili ne.
setVisible postavlja logiku vrednost koja ukazuje na to da li je prozor vidljiv ili
ne.

JAVA
30
Dogaaji

windowClosing nastaje (WindowEvent) kada se forma zatvara. Dodaje se


WindowListener koristei WindowAdapter.

Listener za dogaaj windowClosing dodat je u metod konstruktora prozora


koristei:

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
exitForm(e);
}
});

JAVA
31
Koraci pri stvaranju prozora

ta je potrebno uraditi pri stvaranju prozora:


Stvoriti objekat prozor, koristei uobiajeni metod konstruktora
prozora.
Postaviti title osobinu.
Centrirati prozor na sredinu ekrana.
Postaviti resizable osobinu na false.
Odraditi rutinu za pravlino zatvaranje prozora.
Dodati GridBagLayout menader. Postaviti kontrole u grid layout
manager i izvriti pack metod.

JAVA
32
Primer

public class MyFrame extends JFrame


{
public static void main(String args[ ])
{
//construct frame
new MyFrame().show();
}
public MyFrame()
{
// code to build the form
setTitle("My Frame");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridBagLayout());
// code to position controls follows
.
.
.
pack();
}

JAVA
33
Centriranje prozora

U aplikacijama koje smo do sada koristili, prozor se


pojavljivao u gornjem levom uglu ekrana. Nain gde se
prozor postavlja pri pokretanju aplikacije moe se promeniti,
objanjenje sledi u nastavku.

JAVA
34
Centriranje prozora

Za horizontalno (left) i vertikalno (top) pozicioniranje prozora (dimenzija


width x height) , primenjujemo setBounds metod:

setBounds(left, top, width, height);

Sve dimenzije su tipa int izraene u pixelima. Kako bi centrirali prozor


na monitoru raunara, moramo da znamo vrednosti left i top.
Potrebno su sledee vrednosti: dimenzije prozora (koriste se getWidth
i getHeight metode) i dimenzije ekrana. Dimenzije ekrana sadrane su
u toolkit-u prozora. Objekat Dimension sadri traenu informaciju.

JAVA
35
Centriranje prozora

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

screenSize.width sadri irinu ekrana a screenSize.height visinu.


Kod za centriranje prozora koristei setBounds metod je:

setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 *


(screenSize.height - getHeight())), getWidth(), getHeight());

Ovaj kod treba da se nalazi posle pack metode u kodu koji uspostavlja
prozor, kako bi se koristila odgovarajua veliina prozora

JAVA
36
GridBagLayout manager

GridBagConstraints objekat koristi se za postavljanje kontrola i


pozicioniranje unutar razliitih elemenata mree.
Kontrole se postavljaju u mreu navodei u kojoj koloni (gridx
location) i redu (gridy location) treba da bude.
irina kolone odreena je najirim elementom u datoj koloni.
Visina reda odreena je najviljom kontrolom u odreenom redu.

JAVA
37
GridBagLayout manager...

Kontrola moe da zauzima vie od jednog reda (kolone).


Broj kolona koje e da zauzme jedna kontrola postavlja se
promenljivom gridwidth; broj redova sa gridheight
promenljivom.
Primer: ako imamo GridBagConstraints objekat koji se zove
gridConstraints, a kontrola treba da zauzme dva reda i tri
kolone, poevi od druge kolone (gridx = 1) i etvrtog reda (gridy
= 3):
gridConstraints.gridx = 1;
gridConstraints.gridy = 3;
gridConstraints.gridheight = 2;
gridConstraints.gridwidth = 3;

JAVA
38
JAVA
39
GridBagLayout manager...

Kontrola moe potpuno da ispuni oblast u koju je postavljena ili


ne. Ako je kontrola manja od dodeljenog joj prostora, njene
dimenzije mogu se prilagoditi tako da popuni ceo prostor koristei
promenljivu fill. Mogue su etiri vrednosti:
GridBagConstraints.NONE veliina kontrole se ne menja (default value)
GridBagConstraints.HORIZONTAL irina kontrole ispunjava dodeljeni prostor.
GridBagConstraints.VERTICAL visina kontrole ispunjava dodeljeni prostor.
GridBagConstraints.BOTH kontrola u potpunosti ispunjava dodeljeni
prostor.

JAVA
40
GridBagLayout manager...

Manje izmene u veliini kontrole mogu se napraviti koristei


promenljive ipadx i ipady. One odreuju koliko da se
povea veliina kontrole iznad njene minimalne veliine u
oba pravca (irina i visina). Veliina se navodi u pixelima.
Primer, poveavamo dimenziju za 5 pixela u oba pravca:

gridConstraints.ipadx = 5;
gridConstraints.ipady = 5;

JAVA
41
GridBagLayout manager...

Ako ne elimo da kontrola potpuno popuni dodeljeni prostor, njena


pozicija unutar dodeljenog prostora se postavlja sa promenljivom
anchor. Ima 9 moguih vrednosti:
GridBagConstraints.NORTH kontrola je centrirana na vrhu
GridBagConstraints.NORTHEAST kontrola je u gornjem desnom uglu
GridBagConstraints.EAST kontrola je desno, centrirana vertikalno
GridBagConstraints.SOUTHEAST kontrola je u donjem desnom uglu
GridBagConstraints.SOUTH kontrola je centrirana na dnu
GridBagConstraints.SOUTHWEST kontrola je u donjem levom uglu
GridBagConstraints.WEST kontrola je levo, centrirana vertikalno
GridBagConstraints.NORTHWEST kontrola je u gornjem levom uglu
GridBagConstraints.CENTER kontrola je centrirana horizontalno i vertikalno

JAVA
42
GridBagLayout manager...

Ako kontrola u potpunosti ispunjava prostor moe se postaviti


okvir (prazan prostor) oko kontrole koristei Insets objekat.
Definiu se etiri vrednosti (top, left, bottom i right),
podrazumevana vrednost je Insets(0, 0, 0, 0).
Primer:
gridConstraints.insets = new Insets(10, 20, 10, 30);
Kada je gridConstraints uspostavljen za kontrolu, dodaje se
prozoru koristei add metod. Ako je kontrola myControl,
sintaksa je sledea:
getContentPane().add(myControl, gridConstraints);

JAVA
43
Kontejner opte namene

JAVA
44
JPanel Control

Opciona dugmad, a vrlo esto i check boxovi, povezani su u neku


logiku celinu. Grupisanje ovih kontrola omoguava kontrola koja se
zove panel.
Osobine:
enabled ukazuje na to da li je panel aktivan. Ako je false, sve kontrole na
panelu su neaktivne.
visible ako je false, skriva panel (i sve njegove kontrole).
Metodi:
setBorder postavlja okvirnu liniju panela (ako je ima).
setOpaque ako je true, mogu se primeniti boje pozadine.
setEnabled postavlja da li je panel aktivan.
setVisible postavlja da li je panel vidljiv.

JAVA
45
JPanel Control

Proces postavljanja kontrola na panel identian je postavljanju


kontrola u prozor. Svaki panel ima svoj layout manager.
Paneli se postavljaju na prozor koristei layout manager prozora.
Primer: Postavljamo kontrolu (myControl) na panel (myPanel)
koji je u myFrame prozoru.

JPanel myPanel = new JPanel(); // stvaranje panela


myPanel.setLayout(new GridBagLayout()); //postavljanje layout managera
myPanel.add(myControl, gridConstraints); // postavljanje kontrole
getContentPane().add(myPanel, gridConstraints); // dodavanje panela
//prozoru

JAVA
46
Osnovne kontrole

JAVA
47
JButton Control

Osobine (Properties):
text string koji se prikazuje na tasteru.
font ime fonta, stil i veliina.
background boja pozadine.
foreground boja teksta.
icon slika koja se prikazuje na tasteru
enabled ako je false, taster je vidljiv ali ne moe da se klikne na njega.
visible ako je false, skriva taster.

JAVA
48
JButton Control . . .

Metode:
setText postavlja tekst na taster.
setFont postavlja font.
setBackground postavlja boju pozadine.
setForeground postavlja boju teksta.
setEnabled postavlja logiku vrednost koja ukazuje na to da li
se moe ili ne kliknuti na taster.
setVisible postavlja logiku vrednost da li je taster vidljiv ili ne.
doClick generie klik dogaaj za taster.

JAVA
49
JLabel Control

Kontrola labela koristi se za prikaz teksta koji korisnik ne moe


direktno da menja. Tekst koji prikazuje labela moe se promeniti kao
odgovor na neki dogaaj.
Osobine labele:
text string koji se prikazuje u labeli.
font ime fonta, stil i veliina.
background boja pozadine labele.
foreground boja teksta.
opaque odreuje da li je kontrola neprozirna ili ne.
horizontalAlignment horizontalno poravnanje teksta
verticalAlignment vertikalno poravnanje teksta
border tip okvirne linije koja se koristi (ako je ima)

JAVA
50
JLabel Control

Metode:
setText postavlja tekst labele.
setFont postavlja font.
setBackground postavlja boju pozadine labele.
setForeground postavlja boju teksta.
setOpaque ako je true, mogu se primeniti boje pozadine.
setHorizontalAlignment postavlja poravnanje teksta.
setVerticalAlignment postavlja vertikalno poravnanje teksta.
setBorder koristi se za postavljanje okvira oko labele.
Dogaaj:
mouseClicked dogaaj (MouseEvent) koji se aktivira kada se klikne na
labelu. Dodaje se sa MouseListener koristei
MouseAdapter.

JAVA
51
JLabel Control

Za horizontalno poravnanje teksta (horizontalAlignment)


mogue su sledee vrednosti:
SwingConstants.LEFT tekst je poravnat ulevo
SwingConstants.CENTER tekst je centriran
SwingConstants.RIGHT tekst je poravnat udesno

Za vertikalno poravnanje teksta (verticalAlignment) mogue su


sledee vrednosti:

SwingConstants.TOP tekst je poravnat na vrhu


SwingConstants.CENTER tekst je centriran
SwingConstants.BOTTOM tekst je poravnat na dnu

JAVA
52
JTextField Control

Kontrola text field koristi se za prikaz jednog reda teksta,


koji moe korisnik da unese ili koji je dodeljen u kodu.
Prikazan tekst moe se menjati.
Osobine:
text string koji se prikazuje u tekst polju.
font ime fonta, stil i veliina.
background boja pozadine.
foreground boja teksta.
columns irina prikazanog teksta.
horizontalAlignment horizontalni poloaj teksta
editable ukazuje na to da li je tekst u tekst polju read-only.

JAVA
53
JTextField Control

Metode:
setText postavlja tekst u tekst polje.
getText preuzima tekst iz tekst polja.
setFont postavlja font.
setBackground postavlja boju pozadine.
setForeground postavlja boju teksta.
setColumns postavlja broj kolona.
setHorizontalAlignment postavlja horizontalno poravnanje.
setEditable ako je postavljeno na false, tekst polje ne moe se editovati.
Za horizontalAlignment mogue su sledee vrednosti:
SwingConstants.LEFT tekst levo poravnat
SwingConstants.CENTER tekst centriran
SwingConstants.RIGHT tekst desno poravnat

JAVA
54
JTextArea Control

Ova kontrola omoguava prikaz teksta u vie linija. Prikazani tekst moe se
menjati.
Osobine:
text String displayed in text area.
font Font name, style, size.
background Text area background color.
foreground Color of text.
columns Displayed width of text area.
rows Displayed height of text area.
lineCount Number of lines of text.
lineWrap Boolean variable indicating if text should be word wrapped
default is false.
wrapStyleWord If true (and lineWrap is true), words are wrapped at word
boundaries.
editable Indicates whether text in the text area is read-only.

JAVA
55
JTextArea Control

Metode:
setText Sets the text area text.
getText Retrieves the text area text.
setFont Sets font name, style, size.
setBackground Sets the text area background color.
setForeground Sets color of text.
setColumns Sets the number of columns.
setRows Sets the number of rows.
setLineWrap Turns line wrap on and off.
setWrapStyleWord Turns wrap style on and off.
setEditable If set to false, text area cannot be edited.

JAVA
56
JCheckBox Control

check box kontrola omoguava izbor iz liste mogunosti.


Moe biti odabrana jedna, ni jedna ili vie opcija. Koristi se
u gotovo svim GUI aplikacijama.
Osobine:
text String displayed next to check box.
font Font name, style, size.
background Check box background color.
foreground Color of text.
selectedIndicates if box is selected or not.

JAVA
57
JCheckBox Control

Metode:
setText Sets the check box text.
setFont Sets font name, style, size.
setBackground Sets the check box background color.
setForeground Sets color of text.
setOpaque If true, background colors can be applied.
setSelected Sets whether box is selected or not.
isSelected If true, check box is selected.
doClick Generates a click event for a check box.

JAVA
58
JRadioButton Control

Kontrola opciono dugme (radio button) omoguava izbor


samo jedne mogunosti iz grupe ponuenih. Koriste se u
mnogim GUI aplikacijama. Npr. izbor jedne od niza
ponuenih boja, izbor nivoa teine igrice i slino.
Osobine:
text String displayed next to radio button.
font Font name, style, size.
background Radio button background color.
foreground Color of text.
selectedIndicates if button is selected or not.

JAVA
59
JRadioButton Control

Metode:
setText Sets the radio button text.
setFont Sets font name, style, size.
setBackground Sets the button background color.
setForeground Sets color of text.
setOpaque If true, background colors can be applied.
setSelected Sets whether button is selected or not.
isSelected If true, radio button is selected.
doClick Generates a click event for a radio button.

JAVA
60
JRadioButton Control

Opciona dugmad uvek rade kao grupa, to garantuje da nee biti


istovremeno selektovano vie od jednog. Grupa opcionih dugmadi se
definie koristei ButtonGroup klasu. Stvara se grupa i dugme se
dodaje grupi koristei add metod.
Primer: tri opciona dugmeta firstRadioButton, secondRadioButton,
thirdRadioButton, elimo da budu deo myGroup.
ButtonGroup myGroup = new ButtonGroup();
myGroup.add(firstRadioButton);
myGroup.add(secondRadioButton);
myGroup.add(thirdRadioButton);
Kada se odabere jedno opciono dugme klikom, osobina selected
automatski se postavlja na true, dok e sva ostala dugmad u grupi imati
osobinu selected false.

JAVA
61
Niz kontrola

Kada koristimo kontrole u grupi poeljno je imati mogunost


brze obrade svake kontrole u grupi. U tom sluaju koristi
se control array.
Primer, deklarisanje kontrole od 20 opcionih dugmadi:
JButton[] myButton = new JButton[20];
Brojanje poinje od 0. Mesto u kodu gde e se postaviti
deklaraciji zavisi od eljenog opsega vanosti. Za opseg
vaenja na nivou klase postavlja se izvan svih metoda i sa
prefiksom static. Ako je opseg vaenja metoda tada se
smeta u kod odgovarajue metode.

JAVA
62
Primer:

Imamo 10 check box-ova (chkBox0, chkBox1, chkBox2,


chkBox3, chkBox4, chkBox5, chkBox6, chkBox7,
chkBox8, chkBox9) u jednom prozoru i potrebno je
proveriti osobinu selected od njih. Ako je osobina true
potrebno je odraditi dodatni programski kod. Za jedan check
box kod je:
if (chkBox0.isSelected())
{
[odraditi kod]
}

JAVA
63
Primer:

JCheckBox[] myCheck = new JCheckBox[10];


myCheck[0] = chkBox0;
myCheck[1] = chkBox1;
myCheck[2] = chkBox2;
myCheck[3] = chkBox3;
myCheck[4] = chkBox4;
myCheck[5] = chkBox5;
myCheck[6] = chkBox6;
myCheck[7] = chkBox7;
myCheck[8] = chkBox8;
myCheck[9] = chkBox9;
Deo koji proverava osobinu selected svake od 10 kontrola:
for (int i = 0; i < 10; i++)
{
if (myCheck[i].isSelected())
{
[kod]
}
}

JAVA
64
Primer:

JAVA
65
Postavljanje osnovnog prozora

Na prozor se prvo dodaju tri panela, dva radio button-a i


dva tastera. Za njihovo rasporeivanje koristi se
GridBagLayout manager:

JAVA
66
Kod osnovnog prozora:

/*
* Pizza.java
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Pizza extends javax.swing.JFrame
{

public static void main(String args[])


{
// construct frame
new Pizza().show();
}

public Pizza()
{
setTitle("Pizza Order");
setResizable(false);

JAVA
67
Kod osnovnog prozora:

getContentPane().setLayout(new GridBagLayout());
Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
setBounds((int) (0.5 * (screenSize.width - getWidth())),
(int) (0.5 * (screenSize.height - getHeight())),
getWidth(), getHeight());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
}

JAVA
68
Pravljenje panela sizePanel

static JPanel sizePanel = new JPanel();


static ButtonGroup sizeButtonGroup = new ButtonGroup();
static JRadioButton smallRadioButton = new JRadioButton();
static JRadioButton mediumRadioButton = new JRadioButton();
static JRadioButton largeRadioButton = new JRadioButton();

JAVA
69
sizePanel, postavljanje kontrola i
dodavanje odgovarajuih dogaaja

sizePanel.setLayout(new GridBagLayout());
sizePanel.setBorder(BorderFactory.createTitledBorder("Size"));
smallRadioButton.setText("Small");
smallRadioButton.setSelected(true);
sizeButtonGroup.add(smallRadioButton);
GridBagConstraints gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
gridConstraints.anchor = GridBagConstraints.WEST;
sizePanel.add(smallRadioButton, gridConstraints);

JAVA
70
sizePanel...

smallRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sizeRadioButtonActionPerformed(e);
}
});
mediumRadioButton.setText("Medium");
sizeButtonGroup.add(mediumRadioButton);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 1;
gridConstraints.anchor = GridBagConstraints.WEST;
sizePanel.add(mediumRadioButton, gridConstraints);

JAVA
71
sizePanel...

mediumRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sizeRadioButtonActionPerformed(e);
}
});
largeRadioButton.setText("Large");
largeRadioButton.setSelected(true);
sizeButtonGroup.add(largeRadioButton);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 2;

JAVA
72
sizePanel...

gridConstraints.anchor = GridBagConstraints.WEST;
sizePanel.add(largeRadioButton, gridConstraints);

largeRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sizeRadioButtonActionPerformed(e);
}
});
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
getContentPane().add(sizePanel, gridConstraints);

JAVA
73
sizePanel

Dodavanje praznog sizeRadioButtonActionPerformed


metoda:

private void sizeRadioButtonActionPerformed(ActionEvent e)


{
}

JAVA
74
Rezultat prethodnog koda

JAVA
75
crustPanel

static JPanel crustPanel = new JPanel();


static ButtonGroup crustButtonGroup = new ButtonGroup();
static JRadioButton thinRadioButton = new JRadioButton();
static JRadioButton thickRadioButton = new JRadioButton();

JAVA
76
crustPanel, dodavanje kontrola i
odgovarajuih dogaaja
crustPanel.setLayout(new GridBagLayout());
crustPanel.setBorder(BorderFactory.createTitledBorder("Crust"));
thinRadioButton.setText("Thin Crust");
thinRadioButton.setSelected(true);
crustButtonGroup.add(thinRadioButton);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
gridConstraints.anchor = GridBagConstraints.WEST;
crustPanel.add(thinRadioButton, gridConstraints);

JAVA
77
crustPanel...

thinRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
crustRadioButtonActionPerformed(e);
}
});
thickRadioButton.setText("Thick Crust");
crustButtonGroup.add(thickRadioButton);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 1;
gridConstraints.anchor = GridBagConstraints.WEST;
crustPanel.add(thickRadioButton, gridConstraints);

JAVA
78
crustPanel...

thickRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
crustRadioButtonActionPerformed(e);
}
});
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 1;
getContentPane().add(crustPanel, gridConstraints);

JAVA
79
crustPanel...

Dodavanje praznog crustRadioButtonActionPerformed


metoda:
private void crustRadioButtonActionPerformed(ActionEvent e)
{
}

JAVA
80
Rezultat prethodnog koda

JAVA
81
toppingsPanel

static JPanel toppingsPanel = new JPanel();


static JCheckBox cheeseCheckBox = new JCheckBox();
static JCheckBox mushroomsCheckBox = new JCheckBox();
static JCheckBox olivesCheckBox = new JCheckBox();
static JCheckBox onionsCheckBox = new JCheckBox();
static JCheckBox peppersCheckBox = new JCheckBox();
static JCheckBox tomatoesCheckBox = new JCheckBox();

JAVA
82
toppingsPanel

toppingsPanel.setLayout(new GridBagLayout());
toppingsPanel.setBorder(BorderFactory.createTitledBorder("Toppings"));
cheeseCheckBox.setText("Extra Cheese");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
gridConstraints.anchor = GridBagConstraints.WEST;
toppingsPanel.add(cheeseCheckBox, gridConstraints);
mushroomsCheckBox.setText("Mushrooms");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 1;

JAVA
83
toppingsPanel

gridConstraints.anchor = GridBagConstraints.WEST;
toppingsPanel.add(mushroomsCheckBox, gridConstraints);
olivesCheckBox.setText("Olives");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 2;
gridConstraints.anchor = GridBagConstraints.WEST;
toppingsPanel.add(olivesCheckBox, gridConstraints);
onionsCheckBox.setText("Onions");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 0;
gridConstraints.anchor = GridBagConstraints.WEST;
toppingsPanel.add(onionsCheckBox, gridConstraints);
peppersCheckBox.setText("Green Peppers");

JAVA
84
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 1;
gridConstraints.anchor = GridBagConstraints.WEST;
toppingsPanel.add(peppersCheckBox, gridConstraints);
tomatoesCheckBox.setText("Tomatoes");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 2;
gridConstraints.anchor = GridBagConstraints.WEST;
toppingsPanel.add(tomatoesCheckBox, gridConstraints);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 0;
gridConstraints.gridwidth = 2;
getContentPane().add(toppingsPanel, gridConstraints);

JAVA
85
Rezultat prethodnog koda

JAVA
86
Dodavanje dva radio button-a i
dva tastera
static ButtonGroup whereButtonGroup = new ButtonGroup();
static JRadioButton eatInRadioButton = new JRadioButton();
static JRadioButton takeOutRadioButton = new JRadioButton();
static JButton buildButton = new JButton();
static JButton exitButton = new JButton();
whereButtonGroup = new ButtonGroup();
eatInRadioButton = new JRadioButton();
takeOutRadioButton = new JRadioButton();
buildButton = new JButton();
exitButton = new JButton();

JAVA
87
Postavljanje kontrola i njihovih
metoda
eatInRadioButton.setText("Eat In");
eatInRadioButton.setSelected(true);
whereButtonGroup.add(eatInRadioButton);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 1;
gridConstraints.anchor = GridBagConstraints.WEST;
getContentPane().add(eatInRadioButton, gridConstraints);
eatInRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
whereRadioButtonActionPerformed(e);
}
});

JAVA
88
Postavljanje kontrola i njihovih
metoda

takeOutRadioButton.setText("Take Out");
whereButtonGroup.add(takeOutRadioButton);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 2;
gridConstraints.gridy = 1;
gridConstraints.anchor = GridBagConstraints.WEST;
getContentPane().add(takeOutRadioButton, gridConstraints);

JAVA
89
Postavljanje kontrola i njihovih
metoda
takeOutRadioButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{

whereRadioButtonActionPerformed(e);
}
});
buildButton.setText("Build Pizza");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 2;
getContentPane().add(buildButton, gridConstraints);
buildButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
buildButtonActionPerformed(e);
}
});

JAVA
90
Postavljanje kontrola i njihovih
metoda
exitButton.setText("Exit");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 2;
gridConstraints.gridy = 2;
getContentPane().add(exitButton, gridConstraints);
exitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
exitButtonActionPerformed(e);
}
});

JAVA
91
private void whereRadioButtonActionPerformed(ActionEvent e)
{
}
private void buildButtonActionPerformed(ActionEvent e)
{
}
private void exitButtonActionPerformed(ActionEvent e)
{
}

JAVA
92
Rezultat prethodnog koda

JAVA
93
Deklarisanje etiri globalne
promenljive
static String pizzaSize;
static String pizzaCrust;
static String pizzaWhere;
static JCheckBox[] topping = new JCheckBox[6];

JAVA
94
Inicijalizacija promenljivih

// Initialize parameters
pizzaSize = smallRadioButton.getText();
pizzaCrust = thinRadioButton.getText();
pizzaWhere = eatInRadioButton.getText();
// Define an array of topping check boxes
topping[0] = cheeseCheckBox;
topping[1] = mushroomsCheckBox;
topping[2] = olivesCheckBox;
topping[3] = onionsCheckBox;
topping[4] = peppersCheckBox;
topping[5] = tomatoesCheckBox;

JAVA
95
Metode za svaku od tri grupe
radio button-a:
private void sizeRadioButtonActionPerformed(ActionEvent e)
{
pizzaSize = e.getActionCommand();
}
private void crustRadioButtonActionPerformed(ActionEvent e)
{
pizzaCrust = e.getActionCommand();
}
private void whereRadioButtonActionPerformed(ActionEvent e)
{
pizzaWhere = e.getActionCommand();
}

JAVA
96
Poruka koja se javlja u message
box-u
private void buildButtonActionPerformed(ActionEvent e)
{
// This procedure builds a confirm dialog box that displays your pizza type
String message;
message = pizzaWhere + "\n";
message += pizzaSize + " Pizza" + "\n";
message += pizzaCrust + "\n";
// Check each topping using the array we set up
for (int i = 0; i < 6; i++)
{
if (topping[i].isSelected())
{
message += topping[i].getText() + "\n";
}
}
JOptionPane.showConfirmDialog(null, message, "Your Pizza",
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);
}

JAVA
97
private void exitButtonActionPerformed(ActionEvent e)
{
System.exit(0);
}

private void exitForm(WindowEvent e)


{
System.exit(0);
}

JAVA
98
Kraj

Za odabrane sastojke pizze... ...poruka koja se dobija

JAVA
99
JList Control

Kontrola lista prikazuje listu elemenata iz koje korisnik moe da


odabere jedan ili vie.
Osobine:
model Establishes the items in the list.
font Font name, style, size.
background List background color.
foreground Color of text.
visibleRowCount Number of rows to display.
selectedIndex Zero-based index of the currently selected item in a list.
selectedIndices Zero-based array of indices of all currently selected items in the list.
selectedItem Currently selected item in the list.
selectedItems Array of selected items in list.
selectionMode Gets or sets the method in which items are selected in list (allows single
or multiple selections).
selectionEmpty Boolean variable indicating if any items are selected.

JAVA
100
JList Control

Metode:
setFont Sets font name, style, size.
setBackground Sets the list background color.
setForeground Sets color of text.
setVisibleRowCount Sets number of rows to display.
clearSelection Unselects specified in the list.
getSelectedIndex Returns a value indicating whether the
specified item is selected.
getSelectedIndices Returns an integer array of indices of selected
items.
setSelectedIndex Selects specified item in a list.
setSelectionMode Establishes selection mode.
isSelectionEmpty Checks to see if any items are selected.

JAVA
101
JList Control

Elementi koji se nalaze u listi definiu se koristei DefaultListModel


objekat.
DefaultListModel myListModel = new DefaultListModel();
Kada se stvori lista, elementi se dodaju koristei addElement ili
insertElementAt metode:
myListModel.addElement(itemToAdd);
myListModel.insertElementAt(itemToAdd, index);

JAVA
102
JList Control

Sa metodom addElement, element se dodaje na kraj liste.


Metodom insertElementAt element se dodaje na mesto
odreeno vrednou index.
Kao elementi liste najee imamo string tip podataka,
mada su mogui i drugi tipovi.
Ne postoji mogunost da elementi koji ine listu budu
automatski poreani po abecednom redu (ili na neki drugi
nain sortirani), to se mora odraditi u kodu.
Nema mogunost skrolovanja, to se reava umetanjem
JScrollPane komponente.

JAVA
103
JList Control

Za uklanjanje elementa iz liste postoje tri metoda:


removeElement,
removeElementAt, ili
removeAllElements.
Brisanje elementa:
myListModel.removeElement(itemToRemove);
myListModel.removeElementAt(index);
Brisanje cele liste:
myListModel.removeAllElements();

JAVA
104
JList Control

Kako bi se pristupilo pojedinanom elementu liste koristi se


getElementAt metod:
myListModel.getElementAt(index)
Broj elemenata u listi daje getSize metod (brojanje elemenata poinje
od 0!):
myListModel.getSize();
Kada imamo model liste dodeljuje se list kontroli (myList) koristei
setModel metod:
myList.setModel(myListModel);

JAVA
105
JList Control

Osobina selectionMode odreuje da li je mogue vriti izbor samo


jednog elementa liste, ili vie njih. Izbori su iz ListSelectionModel klase
i mogue su tri vrednosti:

MULTIPLE_INTERVAL_SELECTION izbor vie opsega.


SINGLE_INTERVAL_SELECTION izbor samo jednog opsega.
SINGLE_SELECTION izbor samo jednog elementa.

Podrazumevana vrednost je izbor vie opsega. Kako bi promenili na


izbor samo jednog elementa u myList kontroli, potrebno je sledee:

myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

JAVA
106
JScrollPane Control

Vrlo korisna kontejner kontrola je scroll pane. Slina je


panel kontroli sa dodatom mogunou skrolovanja bilo
koje komponente koja se postavi u scroll panel.
Osobine:
enabled odreuje da li je scroll panel aktivan. Ako je false, komponenta
na panelu je neaktivna.
preferredSize odreivanje veliine (irina, visina) scroll panela.
horizontalScrollBarPolicy odreuje kako se prikazuje horizontalni skrol bar.
verticalScrollBarPolicy odreuje kako se prikazuje vertikalni skrol bar.

JAVA
107
JScrollPane Control

Metode:
setEnabled Sets whether panel is enabled.
setPreferredSize Establishes size of scroll pane.
setViewportView Establishes component hosted by the scroll pane.
setHorizontalScrollBarPolicy Establishes how horizontal scroll bar (if any) is
displayed.
setVerticalScrollBarPolicy Establishes how horizontal scroll bar (if any) is
displayed.

JAVA
108
JScrollPane Control

Potrebno je odrediti veliinu panela. Za to se koristi setPreferredSize metod,


koji koristi Dimension objekat:
JScrollPane myPane = new JScrollPane();
myPane.setPreferredSize(new Dimension(width, height));

width i height su eljene dimenzije u pikselima.


komponenta (myControl) dodaje se scroll panelu primenom setViewportView
metoda.
myPane.setViewportView(myControl);
Kontrola dodata scroll panelu sada se moe skrolovati!

Scroll panel treba dodati prozoru:


getContentPane().add(myPane, new gridConstraints());

JAVA
109
JScrollPane Control

Skrolbarovi, mogu da se pojave ili ne u scroll panelu, zavisno


od podeavanja scroll bar policy. Za horizontalni skrolbar
koristi se setHorizontalScrollBarPolicy sa jednom od
sledee tri konstante:

HORIZONTAL_SCROLLBAR_AS_NEEDED Scroll bar appears when


hosted component is wider
than allocated space (default).
HORIZONTAL_SCROLLBAR_ALWAYS Scroll bar always appears.
HORIZONTAL_SCROLLBAR_NEVER Scroll bar never appears.

JAVA
110
JScrollPane Control

Za vertikalni skrol bar je slino, koristi se setVerticalScrollBarPolicy sa


jednom od sledee tri konstante:

VERTICAL_SCROLLBAR_AS_NEEDED Scroll bar appears when hosted


component is wider than allocated
space (default).
VERTICAL_SCROLLBAR_ALWAYSScroll bar always appears.
VERTICAL_SCROLLBAR_NEVER Scroll bar never appears.

JAVA
111
JComboBox Control

Combo box omoguava izbor jednog elementa iz padajue


liste. Mogue je editovanje, korisnik moe da unese
(ukuca) svoj odgovor.
Koristi vlastiti list model dozvoljavajui direktno dodavanje
ili uklanjanje elemenata iz padajue liste.
Ima mogunost skrolovanja, nije potreban scroll panel.

JAVA
112
JComboBox Control

Osobine:
model Establishes the items in the drop-down list portion.
itemCount Number of items in combo box.
font Font name, style, size.
background Combo box background color.
foreground Color of text.
editable Specifies if selection can be typed by user (default is false).
maximumRowCount Number of rows to display in drop-down box (scroll bar
will automatically appear if there are more items than space).
selectedIndex Zero-based index of the currently selected item in combo box.
selectedItem Currently selected item in the combo box.

JAVA
113
JComboBox Control

Metode:
setEditable Establishes whether selected item can be edited.
getItemCount Number of items in combo box .
setMaximumRowCount Sets number of items to display in drop-down box.
setFont Sets font name, style, size.
setBackground Sets the combo box background color.
setForeground Sets color of text.
getSelectedItem Retrieves the selected item.
setSelectedIndex Selects specified item in combo box.
Dogaaj:
actionPerformed dogaaj nastaje kada korisnik naini izbor ili pritisne
<Enter>. Dodat sa ActionListener.

JAVA
114
JComboBox Control

Elementi se dodaju u combo box (myComboBox) koristei


addItem ili insertItemAt metode:
myComboBox.addItem(itemToAdd);
myComboBox.insertItemAt(itemToAdd, index);
Sa addItem, element se dodaje na kraj liste. Primenom
insertItemAt element se dodaje na mesto koje odreuje
vrednost index-a.
Nema mogunost sortiranja liste, mora se odraditi u kodu.

JAVA
115
JComboBox Control

Za uklanjanje elementa koriste se tri metode: removeItem,


removeItemAt, ili removeAllItems.
Brisanje elementa:
myComboBox.removeItem(itemToRemove);
myComboBox.removeItemAt(index);
Brisanje celokupne liste:
myComboBox.removeAllItems();
Za pristupanje pojedinanom elementu liste koristi se getItemAt metod:
myComboBox.getItemAt(index)

Broj lanova liste daje getItemCount metod:


myComboBox.getItemCount();

JAVA
116
Primer: Flight Planner

JAVA
117
U prozor se postavlja scroll panel (u kome se nalazi list
kontrola), dva combo box-a, tri labele i dva tastera.
GridBagLayout manager ima sledei izgled:

JAVA
118
Kod osnovnog prozora

/*
* Flight.java
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Flight extends JFrame
{
public static void main(String args[])
{
// construct frame
new Flight().show();
}
public Flight()
{
// create frame
setTitle("Flight Planner");
setResizable(false);

JAVA
119
Kod osnovnog prozora
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
exitForm(e);
}
});
getContentPane().setLayout(new GridBagLayout());

pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 *
(screenSize.height - getHeight())), getWidth(), getHeight());
}
private void exitForm(WindowEvent e)
{
System.exit(0);
}
}

JAVA
120
Scroll panel sa list kontrolom u
kojoj su imena gradova
static JLabel citiesLabel = new JLabel();
static JList citiesList = new JList();
static JScrollPane citiesScrollPane = new JScrollPane();

JAVA
121
Pozicioniranje i dodavanje
kontrola u prozor
GridBagConstraints gridConstraints;
citiesLabel.setText("Destination City");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
gridConstraints.insets = new Insets(10, 0, 0, 0);
getContentPane().add(citiesLabel, gridConstraints);
citiesScrollPane.setPreferredSize(new Dimension(150, 100));
citiesScrollPane.setViewportView(citiesList);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 1;
gridConstraints.insets = new Insets(10, 10, 10, 10);
getContentPane().add(citiesScrollPane, gridConstraints);

JAVA
122
Dodavanje elemenata u list kontrolu i
postavljanje elementa koji e biti prvi
prikazan
DefaultListModel citiesListModel = new DefaultListModel();
citiesListModel.addElement("San Diego");
citiesListModel.addElement("Los Angeles");
citiesListModel.addElement("Orange County");
citiesListModel.addElement("Ontario");
citiesListModel.addElement("Bakersfield");
citiesListModel.addElement("Oakland");
citiesListModel.addElement("Sacramento");
citiesListModel.addElement("San Jose");
citiesListModel.addElement("San Francisco");
citiesListModel.addElement("Eureka");
citiesListModel.addElement("Eugene");
citiesListModel.addElement("Portland");
citiesListModel.addElement("Spokane");
citiesListModel.addElement("Seattle");
citiesList.setModel(citiesListModel);
citiesList.setSelectedIndex(0);

JAVA
123
Dodavanje combo box-a
Dodavanje combo box-a u kome se bira sedite:
static JLabel seatLabel = new JLabel();
static JComboBox seatComboBox = new JComboBox();

Pozicioniranje i dodavanje svake kontrole u prozor:


seatLabel.setText("Seat Location");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 0;
gridConstraints.insets = new Insets(10, 0, 0, 0);
getContentPane().add(seatLabel, gridConstraints);
seatComboBox.setBackground(Color.WHITE);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 1;
gridConstraints.insets = new Insets(10, 10, 0, 10);
gridConstraints.anchor = GridBagConstraints.NORTH;
getContentPane().add(seatComboBox, gridConstraints);
JAVA
124
Popunjavanje combo box-a

seatComboBox.addItem("Aisle");
seatComboBox.addItem("Middle");
seatComboBox.addItem("Window");
seatComboBox.setSelectedIndex(0);

JAVA
125
Nakon kompajliranja i pokretanja aplikacije list panel se
izgubio. Ovakve udne stvari se deavaju kada se postavi
eljena veliina (preferred sizes) za jednu kontrolu.
Preferred size je postavljena za scroll panel koji sadri list
kontrolu gradova, ali ne i za combo box. GridBagLayout ima
problema sa tim, pa je potrebno postaviti preferred size i za
combo box.

JAVA
126
seatComboBox.setPreferredSize(new Dimension(100, 25));

JAVA
127
Dodavanje meal combo box-a i
dva tastera
static JLabel mealLabel = new JLabel();
static JComboBox mealComboBox = new JComboBox();
static JButton assignButton = new JButton();
static JButton exitButton = new JButton();

Pozicioniranje i dodavanje kontrola i dogaaja:

mealLabel.setText("Meal Preference");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 2;
gridConstraints.gridy = 0;
gridConstraints.insets = new Insets(10, 0, 0, 0);

JAVA
128
getContentPane().add(mealLabel, gridConstraints);
mealComboBox.setEditable(true);
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 2;
gridConstraints.gridy = 1;
gridConstraints.insets = new Insets(10, 10, 0, 10);
gridConstraints.anchor = GridBagConstraints.NORTH;
getContentPane().add(mealComboBox, gridConstraints);
assignButton.setText("Assign");
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;

JAVA
129
gridConstraints.gridy = 2;
gridConstraints.insets = new Insets(0, 0, 10, 0);
getContentPane().add(assignButton, gridConstraints);
assignButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
assignButtonActionPerformed(e);
}
});
exitButton.setText("Exit");

JAVA
130
gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 2;
gridConstraints.gridy = 2;
gridConstraints.insets = new Insets(0, 0, 10, 0);
getContentPane().add(exitButton, gridConstraints);
exitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
exitButtonActionPerformed(e);
}
});

JAVA
131
Kod za dodavanje izbora jela u meal combo box:
mealComboBox.addItem("Chicken");
mealComboBox.addItem("Mystery Meat");
mealComboBox.addItem("Kosher");
mealComboBox.addItem("Vegetarian");
mealComboBox.addItem("Fruit Plate");
mealComboBox.setSelectedItem("No Preference");

JAVA
132
Na kraju, dodaju se prazni dogaaji za dva tastera:
private void assignButtonActionPerformed(ActionEvent e)
{
}
private void exitButtonActionPerformed(ActionEvent e)
{
}

JAVA
133
private void assignButtonActionPerformed(ActionEvent e)
{
// Build message box that gives your assignment
String message;
message = "Destination: " + citiesList.getSelectedValue() +
"\n";
message += "Seat Location: " +
seatComboBox.getSelectedItem() + "\n";
message += "Meal: " + mealComboBox.getSelectedItem() +
"\n";
JOptionPane.showConfirmDialog(null, message, "Your
Assignment", JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE);
}

JAVA
134
Kod za exitButton

private void exitButtonActionPerformed(ActionEvent e)


{
System.exit(0);
}

JAVA
135

You might also like