Swing pruža veću funkcionalnostnove komponente, proširene mogućnosti starih komponenti, bolje upravljanje događajima,...
Svi elementi Swing-a su deo paketa java.awt.swing. Da bi se koristile Swing klase, mora se koristiti iskaz import sa pozivom željenih klasa ili uključiti sve klase u iskaz kao u primeru:
import java.awt.swing.*;
Swing komponente su podklase klase JComponent.
Kostur aplikacije
Pri kreiranju jednostavne Swing aplikacije, prvi koraci su kreiranje
podklase klase JFrame. Klasa JFrame je proširenje klase Frame.
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.swing.*;
:/* import javax.swing.*; */
public class OkvirSwing extends JFrame {
public OkvirSwing() {
super("Naslov
- VIDI ME");
// mesto dodavanja
komponenti
}
public static void main(String[] args)
{
JFrame frame = new
OkvirSwing();
WindowListener l =
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
}
Dodavanje komponenti u Swing okvir
Pri radu sa JFrame objektima postoke razlike u odnosu na na rad sa njegovom kopijom AWT. Umesto da dodajete kontejnere i komponente direktno u okvir, one se moraju dodati na prelazni kontejner koji se naziva pano sadržaja-content pane.
Objekat JFrame je podeljen na nekoliko različitih panoa. Glavni pano sa kojim se radi je content pane, koji predstavlja kompletnu oblast okvira u koji će se komponente dodavati.
Postupak dodavanja komponente u content pane:
kreirati JPanel objekat (Swing verzija panela).
dodati sve komponente (kontejnere) u JPanel upotrebom metoda
add(Component).
napraviti od panoa JPanel content pane upotrebom metoda setContentPane(Container).
JPanel objekat je jedini argument.
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.swing.*;
public class SwingDugme extends JFrame {
public SwingDugme() {
super("Naslov:
Swinger ");
String natpis = "Mozete
kliknuti na mene " +
"i stupiti u interakciju sa mnom.";
JButton vDugme = new
JButton(natpis);
JPanel pane = new JPanel();
pane.add(vDugme);
setContentPane(pane);
}
public static void main(String[] args) {
JFrame frame = new
SwingDugme();
WindowListener l =
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
}
Rad sa Swing-om
Za svaku komponentu koja je obrađena u Abstract Windowing Toolkit-u, postoji odgovarajuća Swing komponenta.
Labele
Labele su implementirane u Swing upotrebom klase JLabel.
Konstruktor metodi:
JLabel(String, int) natpis sa tekstom i poravnanjem koje je
definisano jednom od tri specifikacije iz klase SwingConstants: LEFT, CENTER,
RIGHT
JLabel(String, Icon, int) natpis sa tekstom, ikonom i poravnanjem
Dugmad
Za Swing dugme korisri se klasa JButton.
Konstruktor metodi
JButton(String)
JButton(Icon)
JButton(String, Icon)
Tekst polja
Tekst polja su implementirana u Swing klasom JTextField. Razlika
između ovih tekst polja i njihovih AWT parnjaka je što metod za ispis
skrivenog unosa teksta, setEchoChar(char), nije podržan u klasi JTextField.
Konstruktor metodi:
JTextField(int) tekst polje specificirane širine.
JTextField(String, int) tekst polje koji sadrži dati tekst
i ima specificiranu širinu
Klasa JPasswordField se koristi za kreiranje tekst polja koja koriste
karaktere za skrivanje unosa. Ova klasa poseduje konstruktor metode kao
i JTextField: JPasswordField(int) i JPasswordField(String, int).
Tekst oblasti
Tekst oblasti su implementirane u Swing klasom JTextArea.
Konstruktor metodi:
JTextArea(int, int) tekst oblast sa navedenim brojem
redova i kolona
JTextArea(String, int, int) tekst oblast sa navedenim tekstom,
brojem redova i kolona
Polja za potvrdu i radi dugmad (Check Boxes/Radio Buttons)
Klasa JCheckBox je implementacija za check box-ove u Swing-u. Funkcionalnost
je ista kao kod AWT sem čto sadrže i ikone kao obeležje.
Konstruktor metodi
JCheckBox(String) check box sa navedenim tekst natpisom
JCheckBox(String, boolean) check box sa navedenim tekst natpisom
koji je aktiviran ako je drugi argument true
JCheckBox(Icon) check box koji sadrži navedenu ikonu
JCheckBox(Icon, boolean) check box koji sadrži navedenu ikonu
i koji je aktivirana ako je drugi argument true
JCheckBox(String, Icon) check box koji sadrži navedeni tekst
i ikonu
JCheckBox(String, Icon, boolean) check box koji sadrži navedeni
tekst i ikonu koji su aktivirani ako treći argument je true
Check box grupe su implementirane u Swingupotrebom klase ButtonGroup.
Radio dugmad su implementirana u Swing posredstvom klase JRadioButton.
Konstruktor metode su iste kaoi u slučaju klase JCheckBox .
Liste izbora
Liste izbora koje su bile kreirane u AWT-u upotrebom klase Choice,
su prisutne posredstvom klase JComboBox.
Koraci pri kreiranju
1. Konstruktor JComboBox() se koristi bez argumenata.
2. Metod polja za potvrdu addItem(Object) se koristi da bi se
dodale stavke na listi.
3. Metod polja za potvrdu setEditable(boolean) se koristi sa
argumentom false.
Trake za pomeranke teksta - Scrollbars
Scrollbarsi su implementirane u Swing putem klase JScrollBar.
Konstruktor metodi:
JScrollBar(int) scrollbar sa navedenom orientacijom.
JScrollBar(int, int, int, int, int) scrollbar sa navedenom
orientacijom, početnom vrednosti, scroll box veličinom, minimalnom vrednošću,
maximalnom vrednošću.
Orijentacija je indicirana promenljivima klase SwingConstant
HORIZONTAL ili VERTICAL.
Primer prevoda apleta rgb2hsb sa prethodnog časa u aplikaciju (zapravo kostur bez metoda za upravljanje događajem koji će uskoro biti dodat)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingRGB2HSB extends JFrame {
SwingColorControls RGBcontrols, HSBcontrols;
JPanel swatch;
public SwingRGB2HSB() {
super("Konverzija");
JPanel pane = new JPanel();
pane.setLayout(new GridLayout(1,
3, 5, 15));
swatch = new JPanel();
swatch.setBackground(Color.black);
RGBcontrols = new SwingColorControls(this,
"Crvena",
"Zelena", "plava");
HSBcontrols = new SwingColorControls(this,
"Hue",
"Saturation", "Brightness");
pane.add(swatch);
pane.add(RGBcontrols);
pane.add(HSBcontrols);
setContentPane(pane);
}
public static void main(String[] args) {
JFrame frame = new SwingRGB2HSB();
WindowListener l = new WindowAdapter()
{
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
public Insets getInsets() {
return new Insets(10, 10,
10, 10);
}
}
class SwingColorControls extends JPanel {
SwingRGB2HSB frame;
JTextField tfield1, tfield2, tfield3;
SwingColorControls(SwingColorTest parent,
String l1, String l2, String
l3) {
frame = parent;
setLayout(new GridLayout(3,2,10,10));
tfield1 = new JTextField("0");
tfield2 = new JTextField("0");
tfield3 = new JTextField("0");
add(new JLabel(l1, JLabel.RIGHT));
add(tfield1);
add(new JLabel(l2, JLabel.RIGHT));
add(tfield2);
add(new JLabel(l3, JLabel.RIGHT));
add(tfield3);
}
public Insets getInsets() {
return new Insets(10, 10,
0, 0);
}
}
Mnemonici tastature
Mnemonici tastature se postavljaju metodom setMnemonic(char) nad komponentom gde se mnemonik koristi za kontrolu.
Na primer Alt +I ce altivirati dugme Info
JButton infoButton = new JButton("Info");
infoButton.setMnemonic('i');
Oblačići - ToolTips
ToolTip se kao komponente postavljaju pozivom metoda setToolTipText(String) nad ciljnom komponentom.
Primer kreiranja JScrollBar komponente i pridruživanje njenog oblačića.
JScrollBar slika = new JScrollBar();
slika.setToolTipText("Pomerite traku radi pomeranja slike");
Standardni dijalog boxovi
Klasa JOptionPane pruža nekolikometoda za kreiranje standardnih dijalog
boxova.
Postoje četiri standard dialog boksova:
ConfirmDialog pitanje i Yes, No, Cancel odgovori.
InputDialog upit i tekstualni unos.
MessageDialog prikaz poruke.
OptionDialog kombinacija prethodna tri tipa dijalog box-ova.
Confirm Dialog Boxes
Primer koji koristi ovaj tip dijalog box-a i smesta odgovor u promenljivu odgovor:
int odgovor;
odgovor = JOptionPane.showConfirmDialog(null,
"Da li ste za formatiranje diska?");
Primer broj 2:
int odgovor = JOptionPane.showConfirmDialog(null,
"Da li ste za formatiranje diska?",
"Naslov u naslovnoj traci dijalog box-a",
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE);
Input Dialog Boxes
Metod za kreiranje
showInputDialog(Component, Object)
Argumenti su: komponenta roditelja i string/komponenta/ikona
prikazani u box-u.
String odgovor = JOptionPane.showInputDialog(null,
"Kako se zovete:");
Metod za kreiranje
showInputDialog(Component, Object, String, int)
Prva dva su kao u prethodnom slučaju, a ostala dva su
tekst u naslovnoj traci i jedna od pet promenljivih klase koja opisuje
tip dijalog boxa: ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE,
ili WARNING_MESSAGE.
String odgovor = JOptionPane.showInputDialog(null,
"Unesite JMBG broj?",
"Unos",
JOptionPane.QUESTION_MESSAGE);
Message Dialog Boxes
Metod za kreiranje
showMessageDialog(Component, Object)
Za razliku od drugih dialog boxova, message dialog boxes ne vraća nikakvu
korisnu vrednost kao odgovor.
Primer MDB za poruke:
JOptionPane.showMessageDialog(null,
"Obrisana datoteka.");
Metod z akreiranje
showMessageDialog (Component, Object, String, int)
Upotreba je ista kao kod metoda showInputDialog() sa istim argumentima,
sem što showMessageDialog() ne vraća vrednost.
Primer:
String response = JOptionPane.showMessageDialog(null,
"Obrisana datoteka.",
" Alert no 2",
JOptionPane.WARNING_MESSAGE);
Opcioni Dijalog Boxovi
Metod za kreiranje
showOptionDialog(Component, Object, String, int, int, Icon, Object[],
Object) method.
Argumenti metoda:
roditeljska komponenta dijaloga
tekst, ikona, ili komponenta koja se prikazuje
string koji se prikazuje u traci za naslov dijalog box-a
tip dijalog boxa definisan promenljivama klase
YES_NO_OPTION, YES_NO_CANCEL_OPTION, odnosno broj 0 ukoliko ne treba niti
jedno dugme
ikona koju treba prikazati upotrebom promenljivih ERROR_MESSAGE,
INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, WARNING_MESSAGE,
odnosno broj 0 ako niti jedna od ovih ikona ne treba da bude prikazana
objekat Icon koji će biti prikazan umesto neke od ikona u prethodnom
argumentu
niz objekata koji sadrži komponenete odnosno druge objekte
koji predstavljaju izbore u okviru dijalog boksa ukoliko se ne koriste
YES_NO_OPTION i YES_NO_CANCEL_OPTION
objekt koji predstavlja podrazumevanu selekciju ako se ne koriste
opcije YES_NO_OPTION i YES_NO_CANCEL
Primer kreiranja opcionog dijalog box-a koji koristi niz objekata JButton za opcije u boksu i element pol[2] kao podrazumevanu selekciju:
JButton[] pol = new JButton[3];
pol[0] = new JButton("Muski");
pol[1] = new JButton("Zenski");
pol[2] = new JButton("bespolan");
int response = JOptionPane.showOptionDialog(null,
"Pol?,
"Pol dijalog",
0,
JOptionPane.INFORMATION_MESSAGE,
null,
pol,
pol[2]);
Primer koji prikazuje više dijalog boxova. Nakon prihvatanja korisnkovog
unosa, one se čuvaju u tekst polja glavnog prozora.
1: import java.awt.GridLayout;
2: import java.awt.event.*;
3: import java.awt.swing.*;
4:
5: public class Info extends JFrame {
6: private JLabel titleLabel = new JLabel("Title:
",
7: SwingConstants.RIGHT);
8: private JTextField title;
9: private JLabel addressLabel = new
JLabel("Address: ",
10: SwingConstants.RIGHT);
11: private JTextField address;
12: private JLabel typeLabel = new JLabel("Type:
",
13: SwingConstants.RIGHT);
14: private JTextField type;
15:
16: public Info() {
17: super("Site Information");
18:
19: // naziv sajta
20: String response1
=JOptionPane.showInputDialog(null,
21:
"Naslov sajta je:");
22: title = new JTextField(response1,
20);
23:
24: // unos URL-a i
prikaz
25: String response2
=JOptionPane.showInputDialog(null,
26:
"URL sajta:");
27: address = new JTextField(response2,
20);
28:
29: // tip sajta
30: String[] choices
= { "PrivatnoLice", "Organizacija", "Razno" };
31: int response3 =
JOptionPane.showOptionDialog(null,
32:
"Koji je tip sajta?",
33:
"Site Type",
34:
0,
35:
JOptionPane.QUESTION_MESSAGE,
36:
null,
37:
choices,
38:
choices[0]);
39: type = new JTextField(choices[response3],
20);
40:
41: JPanel pane = new
JPanel();
42: pane.setLayout(new
GridLayout(3, 2));
43: pane.add(titleLabel);
44: pane.add(title);
45: pane.add(addressLabel);
46: pane.add(address);
47: pane.add(typeLabel);
48: pane.add(type);
49:
50: setContentPane(pane);
51: }
52:
53: public static void main(String[] args)
{
54: try {
55:
UIManager.setLookAndFeel(
56:
UIManager.getSystemLookAndFeelClassName());
57: } catch (Exception
e) {
58:
System.err.println("Upozorenje"
59:
+ "look and feel: " + e);
60: }
61:
62: JFrame frame =
new Info();
63:
64: WindowListener
l = new WindowAdapter() {
65:
public void windowClosing(WindowEvent e) {
66:
System.exit(0);
67:
}
68: };
69: frame.addWindowListener(l);
70:
71: frame.pack();
72: frame.setVisible(true);
73: }
74: }