Kurs programowania

Transkrypt

Kurs programowania
Kurs programowania
Wykład 4
Wojciech Macyna
23 marca 2016
Wojciech Macyna
Kurs programowania
Graficzny interfejs użytkownika - GUI
W Javie możemy skorzystać z dwóch bibliotek do tworzenia
graficznych interfejsów:
AWT (Abstract Windowing Toolkit) – podstawowa biblioteka bed
˛ aca
˛
interfejsem do graficznych funkcji systemu. Stad
˛
wyglad
˛ komponentów zależny od systemu.
Biblioteka: java.awt.*
SWING – biblioteka w Javie niezależna od systemu (ale
wykorzystujaca
˛ niektóre elementy AWT). Stad
˛
identyczny wyglad
˛ GUI na różnych platformach.
Komponenty maja˛ podobne nazwy jak w AWT ale
poprzedzone litera˛ J (np. Frame w AWT i JFrame
w SWING).
Biblioteka: javax.swing.*
Na wykładzie zostanie omówiona głównie biblioteka AWT.
Wojciech Macyna
Kurs programowania
Klasa java.awt.Frame
Główne konstruktory
public Frame()
public Frame(String title)
public Frame(String title, GraphicsConfiguration gc)
Główne metody
public void setSize(int width, int height) [domyślny
rozmiar 20x20]
public void setBounds(int x, int y, int width, int
height)
public void pack() [dopasowuje rozmiar okna do zawartości]
public void setVisible(boolean show)
Wojciech Macyna
Kurs programowania
Kontenery i komponenty
W GUI rozróżniamy dwa podstawowe rodzaje elementów:
komponenty i zawierajace
˛ (wyświetlajace)
˛
je kontenery.
Podstawowe typy komponentów AWT
Button, CheckBox, Choice, Label, List, TextField,
TextArea, Menu, ...
Podstawowe typy kontenerów AWT
Frame, Panel, ScrollPane
Uwaga: Panel jest także komponentem.
Dodawanie komponentu do konteneru
Metoda public Component add(Component c)
Wojciech Macyna
Kurs programowania
Przykład
przyklad1.java
1
2
3
4
5
6
7
8
9
10
11
12
import java . awt .*;
public class przyklad1 {
public static void main ( String [] args ) {
Frame okno = new Frame (" Przyklad 1" );
Button przycisk = new Button (" Przycisk " );
}
}
okno . setBounds (100 ,100 ,640 ,480);
okno . add ( przycisk );
okno . setVisible ( true );
Wojciech Macyna
Kurs programowania
Zarzadzanie
˛
wygladem
˛
Kontener powinien użyć zarzadcy
˛
wygladu
˛ ustawianego metoda:
˛
public void setLayout(LayoutManager m)
Podstawowe wyglady
˛
java.awt.FlowLayout
java.awt.BorderLayout
java.awt.GridLayout
java.awt.GridBagLayout
java.awt.CardLayout
Wojciech Macyna
Kurs programowania
Przykład użycia
flowDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java . awt .*;
public class flowDemo {
public static void main ( String [] args ) {
Frame okno = new Frame (" flowDemo " );
Button l1 = new Button (" Napis1 " );
Button l2 = new Button (" Napis2 " );
Button l3 = new Button (" Napis3 " );
Button l4 = new Button (" Napis4 " );
}
}
okno . setBounds (100 ,100 ,200 ,200);
okno . setLayout ( new FlowLayout ( FlowLayout . CENTER ));
okno . add ( l1 );
okno . add ( l2 );
okno . add ( l3 );
okno . add ( l4 );
okno . setVisible ( true );
Wojciech Macyna
Kurs programowania
Przykład użycia
gridDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java . awt .*;
public class gridDemo {
public static void main ( String [] args ) {
Frame okno = new Frame (" gridDemo " );
Button l1 = new Button (" Napis1 " );
Button l2 = new Button (" Napis2 " );
Button l3 = new Button (" Napis3 " );
Button l4 = new Button (" Napis4 " );
}
}
okno . setBounds (100 ,100 ,200 ,200);
okno . setLayout ( new GridLayout (2 ,2));
okno . add ( l1 );
okno . add ( l2 );
okno . add ( l3 );
okno . add ( l4 );
okno . setVisible ( true );
Wojciech Macyna
Kurs programowania
Przykład użycia
borderDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java . awt .*;
public class borderDemo {
public static void main ( String [] args ) {
Frame okno = new Frame (" borderDemo " );
Button l1 = new Button (" Napis1 " );
Button l2 = new Button (" Napis2 " );
Button l3 = new Button (" Napis3 " );
Button l4 = new Button (" Napis4 " );
Button l5 = new Button (" Napis5 " );
}
}
okno . setBounds (100 ,100 ,200 ,200);
okno . setLayout ( new BorderLayout ());
okno . add (l1 , BorderLayout . NORTH );
okno . add (l2 , BorderLayout . SOUTH );
okno . add (l3 , BorderLayout . WEST );
okno . add (l4 , BorderLayout . EAST );
okno . add (l5 , BorderLayout . CENTER );
okno . setVisible ( true );
Wojciech Macyna
Kurs programowania
Delegacyjny model zdarzeń
Źródło zdarzenia – jaki komponent jest źródłem zdarzenia.
Słuchacz zdarzenia – kto słucha i jaka˛ metode˛ powinien
wywołać.
Interfejs – zbiór metod odpowiedzialnych za obsługe˛ zdarzeń.
Przykładowe interfejsy obsługi zdarzeń
java.awt.event.ActionListener z metoda˛
public void actionPerformed(ActionEvent e)
java.awt.event.WindowListener z metodami:
public void windowOpened(WindowEvent e)
public void windowClosing(WindowEvent e)
public void windowClosed(WindowEvent e)
public void windowIconified(WindowEvent e)
public void windowDeiconified(WindowEvent e)
public void windowActivated(WindowEvent e)
public void windowDeactivated(WindowEvent e)
Wojciech Macyna
Kurs programowania
Adaptery
Klasy implementujace
˛ interfejsy obsługi zdarzeń z pustymi metodami.
Podstawowe klasy adapterów
WindowAdapter
ComponentAdapter
ContainerAdapter
FocusAdapter
KeyAdapter
MouseAdapter
Wojciech Macyna
Kurs programowania
Przykład użycia adaptera
przyklad2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java . awt .*;
import java . awt . event .*;
class WindowAdapterDemo extends WindowAdapter {
Label p;
WindowAdapterDemo ( Label p) { this .p = p; }
public void windowClosing ( WindowEvent e ) { System . exit (0); }
public void windowActivated ( WindowEvent e) {
p. setText ( " Aktywne " ); }
public void windowDeactivated ( WindowEvent e ) {
p. setText ( " Nie aktywne " ); }
}
public class przyklad2 {
public static void main ( String [] args ) {
Frame okno = new Frame (" Przyklad 2" );
Label napis = new Label ( "" , Label . CENTER );
napis . setBackground ( Color . RED );
napis . setForeground ( Color . BLUE );
napis . setFont ( new Font ( Font . SERIF , Font . BOLD ,100));
okno . addWindowListener ( new WindowAdapterDemo ( napis ));
okno . setBounds (100 ,100 ,640 ,240);
okno . add ( napis );
okno . setVisible ( true );
}
}
Wojciech Macyna
Kurs programowania
Klasa java.awt.Button
Główne konstruktory
public Button()
public Button(String label)
Główne metody
public void addActionListener(ActionListener a)
public void setActionCommand(String c)
Wojciech Macyna
Kurs programowania
Klasa java.awt.Label
Główne konstruktory
public Label()
public Label(String text)
public Label(String text, int alignment) [wyrównanie za
pomoca˛ stałych Label.LEFT, Label.RIGHT, Label.CENTER]
Główne metody
public void setText(String text)
public String getText()
Wojciech Macyna
Kurs programowania
Klasa java.awt.TextField
Główne konstruktory
public
public
public
public
TextField()
TextField(String text)
TextField(int columns)
TextField(String text, int columns)
Główne metody
public String getText()
public void setText(String text)
public void setEditable(boolean b)
Wojciech Macyna
Kurs programowania
Przykład
Program.java (1/3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java . awt .*;
import java . awt . event .*;
class MyWindowAdapter extends WindowAdapter {
public void windowClosing ( WindowEvent e ) { System . exit (0); }
}
class EndButtonAdapter implements ActionListener {
public void actionPerformed ( ActionEvent e) { System . exit (0); }
}
class EndButton extends Button {
EndButton () {
super ( " Koniec " ); addActionListener ( new EndButtonAdapter ()); }
}
class MyButtonAdapter implements ActionListener {
Program p;
MyButtonAdapter ( Program p) { this .p = p; }
public void actionPerformed ( ActionEvent e) { p . action (); }
}
class MyButton extends Button {
MyButton ( Program p) {
super ( " Przepisz " ); addActionListener ( new MyButtonAdapter (p ));}
}
Wojciech Macyna
Kurs programowania
Przykład cd.
Program.java (2/3)
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class MyFrame extends Frame {
MyFrame ( Program p) {
super ( " Program " );
setBounds (100 ,100 ,640 ,480);
addWindowListener ( new MyWindowAdapter ());
setFont ( new Font ( Font . SANS_SERIF , Font . PLAIN ,40));
setLayout ( new GridLayout (4 ,1));
EndButton koniec = new EndButton ();
MyButton akcja = new MyButton (p );
p. wynik = new Label ();
p. dane = new TextField (40);
add (p. dane );
add ( akcja );
add (p. wynik );
add ( koniec );
}
}
pack ();
setResizable ( false );
Wojciech Macyna
Kurs programowania
Przykład cd.
Program.java (3/3)
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class Program {
MyFrame frame ;
Label wynik ;
TextField dane ;
}
void action () {
wynik . setText ( dane . getText ());
dane . setText (" " );
}
public static void main ( String [] args ) {
Program p = new Program ();
p. frame = new MyFrame (p );
p. frame . setVisible ( true );
}
Wojciech Macyna
Kurs programowania