1
Tworzenie graficznych
interfejsów użytkownika
Swing
2
Pakiety
• Komponenty
import java.awt.*;
import javax.swing.*;
• Obsługa zdarzeń
import java.awt.event.*;
3
Komponenty
JComponent
JButton
JLabel
JTextField
JTextArea
JComboBox
• ustawienie
rozmiarów
• ustawienie
koloru tła
• ustawienie
czcionki używanej
do wyświetlania
tekstu
•...
4
Kontenery
• Kontener to pojemnik
na komponenty
• Kontener jest też
komponentem – to
znaczy że może być
wkładany do innego
kontenera
• Metody kontenerów:
– dodawanie i usuwanie
elementów kontenera,
– rozmieszczanie
komponentów
Container
JWindow
JFrame
JPanel
5
Okna i ramki
• JWindow posiada
panel na zawartość
• JFrame posiada
dodatkowo ramkę,
pasek tytułu,
przyciski
zamknięcia,
minimalizacji, panel
na menu
6
Tworzenie własnego okna
public class Okno extends JFrame{
JButton b = new JButton("Przycisk");
Container cp;
public Okno(){
super("Tytuł na belce okna");
cp = getContentPane();
cp.add(b);
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
new Okno();
}
}
7
Tworzenie własnego okna
public class Okno extends JFrame{
JButton b = new JButton("Przycisk");
JPanel panel = new JPanel();
public Okno(){
super("Tytuł na belce okna");
panel.add(b);
setContentPane(panel);
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
new Okno();
}
}
8
Tworzenie własnego okna
public class MojPanel extends JPanel{
JButton b = new JButton("Przycisk");
public MojPanel(){
add(b);
}
public static void main(String[] args){
JFrame f = new JFrame("Tytuł");
f.setContentPane(new MojPanel());
f.setSize(500,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
9
Zaprogramowanie przycisku
„Zamknij”
setDefaultCloseOperation(JFrame.EXIT_ON_CL
OSE);
• DISPOSE_ON_CLOSE
– zamyka ramkę,
usuwa obiekt reprezentujący ramkę, ale
pozostawia pracującą aplikację
• DO_NOTHING_ON_CLOSE
– pozostawia
ramkę otwartą i kontynuuje pracę aplikacji
• HIDE_ON_CLOSE
– zamyka ramkę
pozostawiając pracującą aplikację
11
Przyciski
JButton przycisk = new
JButton("Przycisk");
ImageIcon ico = new
ImageIcon("smile.gif");
JButton przycisk = new
JButton("Przycisk",
ico);
12
Etykiety
JLabel label =
JLabel("Etykieta");
ImageIcon ico = new
ImageIcon("smile.gif");
JLabel label =
JLabel("Etykieta", ico,
SwingConstants.RIGHT);
13
Pola tekstowe
JTextField txt =
new JTextField("tekst",
10);
txt.setText("napis");
String s = txt.getText();
JPasswordField p = new
JPasswordField(10);
char[] haslo =
p.getPassword();
....
Arrays.fill(haslo,' ');
14
Obszary tekstowe
JTextArea t = new
JTextArea(5, 10);
t.setLineWrap(true)
;
t.setWrapStyleWord(true)
;
JScrollPane s = new
JScrollPane(t);
15
Pola opcji i pola wyboru
JCheckBox c = new
JCheckBox("opcja 1");
boolean zaznaczony =
c.isSelected();
JRadioButton r = new
JRadioButton("opcja 1");
16
Grupowanie przycisków
opcji
• Obiekt klasy ButtonGroup jest logiczny
(nie graficzny) – zapewnia, że tylko jeden
przycisk z grupy może być wciśnięty
ButtonGroup grupa = new
ButtonGroup();
grupa.add(przycisk1);
grupa.add(przycisk2);
grupa.add(przycisk3);
17
Listy
JComboBox c = new
JComboBox();
c.addItem(
"
Biały
"
);
c.addItem(
"
Niebieski
"
);
c.setEditable(true);
String s = (String)
c.getSelectedItem();
JList l = new JList();
String s = (String)
l.getSelectedValue();
18
Okna dialogowe
MessageDialog
ConfirmDialog
InputDialog
19
Okna dialogowe
• JOptionPane.
showMessageDialog
(
null,"Jakaś wiadomość");
• String odp = JOptionPane.
showInputDialog
(
"Podaj wartość");
• int odp = JOptionPane.
showConfirmDialog
(
null,"Czy...?");
switch(odp){
case JOptionPane.YES_OPTION : ....;
case JOptionPane.NO_OPTION : ....;
}
20
Wybieranie pliku i koloru
JFileChooser f = new
JFileChooser();
int wynik =
f.showOpenDialog(this);
File ff =
f.getSelectedFile();
Color k =
JColorChooser.showDialog(
this,"Wybierz",
Color.black);
21
Suwaki i wskaźniki
zaawansowania
JSlider s = new
JSlider(0,100);
int w = s.getValue();
JProgressBar pb = new
JProgressBar(0,100);
pb.setStringPainted(
true);
pb.setValue(30);
int w = pb.getValue();
23
Menu
JMenuBar mb = new JMenuBar();
JMenu p = new JMenu(„Plik”);
JMenu e = new JMenu(„Edycja”);
JMenuItem o = new
JMenuItem(„Otwórz”);
JMenuItem z = new
JMenuItem(„Zapisz”);
JMenuItem cz = new
JMenuItem(„Czcionka”);
mb.add(p); mb.add(e);
p.add(o); p.add(z);
e.add(cz);
okno.setJMenuBar(mb);
Plik
Edycja
Otwó
rz
Czcion
ka
Zapis
z
JMenuBar
JMenu
JMenuItem
24
Panel z kartami
JTabbedPane p =
new JTabbedPane();
p.add(„Dane”,panel1);
p.add(„Właściwości”,
panel2);
25
SplitPanel
JSplitPane panel =
new JSplitPane(
JSplitPane.HORIZONTAL_SPL
IT,p1,p2);
26
Rozmieszczanie
komponentów
• Każdy kontener posiada obiekt
zajmujący się rozmieszczaniem
komponentów – menedżer rozkładu
(layout)
• Zmiana menedżera rozkładu – metoda
setLayout
• Domyślny menedżer dla okna (JFrame)
BorderLayout
• Domyślny menedżer dla paneli
(JPanel) FlowLayout
27
BorderLayout
c – kontener
c.setLayout(new
BorderLayout());
c.add(k1,”North”);
c.add(k2,”South”);
c.add(k3,”Center”);
c.add(k4,”West”);
c.add(k5,”East”);
28
FlowLayout
c – kontener
c.setLayout(
new FlowLayout(
FlowLayout.CENTER
));
c.add(k1);
c.add(k2);
c.add(k3);
c.add(k4);
c.add(k5);
29
GridLayout
c – kontener
c.setLayout(new
GridLayout(2,2));
c.add(k1);
c.add(k2);
c.add(k3);
c.add(k4);
30
CardLayout
31
Składanie layoutów
p.add(b1);
p.add(b2);
cp.setLayout(new
GridLayout(2,2));
cp.add(p);
cp.add(b3);
cp.add(b4);
cp.add(b5);
JButton b1 = new JButton("k1");
JButton b2 = new JButton("k2");
JButton b3 = new JButton("k3");
JButton b4 = new JButton("k4");
JButton b5 = new JButton("k5");
JPanel p = new JPanel();