Java Foundation Clases

Transkrypt

Java Foundation Clases
Java Foundation Clases
Tworzenie graficznych interfejsów użytkownika
(GUI) w Javie
Jacek Starzyński, IETiSIP PW, 2006
Tematyka:
Co to jest JFC?
Swing – zadania i struktura
Szkielet programu
Model zdarzeń
Aplety
Programowanie wizualne - Java Beans
Wykorzystanie Netbeans
JFC – co to jest?
Java Foundation Classes (JFC) to zbiór bibliotek klas
języka Java, stanowiący część Java 2 Platform
Standard Edition (J2SE) i mający stanowić
podstawę do tworzenia graficznych interfejsów
użytkownika (GUI) przenośnych pomiędzy
platformami Linux, MS Windows i Mac OSX.
1996 Internet FC Netscape + SUN => JFC przedstawiono na konferencji JavaOne w 1997
JFC składa się z
biblioteki AWT
biblioteki Java 2 Swing
biblioteki Java 2D API.
Dodatkowymi wyróżniającymi cechami są: dostosowywanie wyglądu komponentów
przez PLAF, mechanizm DAD, wspomaganie tworzenia aplikacji dla osób
upośledzonych i wspomaganie internacjonalizacji aplikacji.
Swing
Swing jest obiektową biblioteką komponentów do
tworzenia GUI (GUI toolkit)
Swing jest napisany w Javie, a więc w pełni
przenośny
Swing symuluje wygląd widgetów podobny do
widgetów środowiska, w którym działa (PLAF)
Swing jest częścią J2SE, czyli podstawowego API
dla wszystkich programów w Javie
Komponenty Swing
Poprawione AWT
●
●
●
●
●
●
●
●
●
●
●
●
●
etykiety (labels)
pola tekstowe (text fields)
przyciski (buttons)
pola opcji (check boxes)
pola wyboru (radio buttons)
rozwijane listy wyboru (combo
boxes)
listy (lists)
pola tekstowe (text areas)
suwaki (scroll panes and scroll bars)
panele (panels)
ramki (frames)
pola dialogowe (dialogs)
menu (menus and menu bars)
Nowe
●
●
●
●
●
●
●
●
●
●
●
●
●
●
podpowiedzi (tool tips)
potencjometry (sliders)
tabele (tables)
drzewa (trees)
style tekstu (styled text areas)
paski postepu (progress bars)
listy wyboru (spinners)
od 1.4
formatowane pola tekstowe
(formatted text fields)
od 1.4
dialogi wyboru koloru (color
choosers)
dialogi wyboru pliku (file choosers)
pola stowarzyszone (split panes)
panele pól (tabbed panes)
ramki wewnętrzne (internal frames)
warstwy (layered panes)
Pakiety Swing
17 pakietów publicznych
●
javax.swing
●
javax.accessibility
●
javax.swing.plaf
●
javax.swing.text.html
●
javax.swing.plaf.basic
●
javax.swing.text.parser
●
javax.swing.border
●
javax.swing.plaf.metal
●
javax.swing.text.rtf
●
javax.swing.colorchooser
●
javax.swing.plaf.multi
●
javax.swing.tree
●
javax.swing.event
●
javax.swing.table
●
javax.swing.undo
●
javax.swing.filechooser
●
javax.swing.text
Swing jest dużą biblioteką. W ramach
tych zajęć zorientujemy się w ogólnych
jego koncepcjach, ale nie jest możliwe
omawianie tu wszystkich detali, a nawet
wszystkich komponentów.
Nazwy pakietów pozwalają łatwo
zorientowac się w ich zawartości.
Swing jest konsekwentnym, dobrze
zaprojektowanym modelem
programowania GUI.
Do tworzenia aplikacji Swing bardzo
pomocne jest wykorzystanie narzędzi
graficznych. Zdecydowanie przyspieszają
one projektowanie wyglądu aplikacji.
Swing umożliwia uzyskanie czytelnego
kodu nawet przy pomocy takich narzędzi.
Najprostszy(?) program
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
Dawniej:
frame.addWindowListener(
new WindowAdapter() {
public void windowClosing(
WindowEvent e) {
System.exit(0);
}
});
public class HelloSwing {
}
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new JLabel("Hello, Swing!"));
// <1.5: frame.getContentPane().add(...)
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
};
SwingUtilities.invokeLater( r );
}
Przykład: HelloSwing
Zdarzenia
Źródło
(np. Komponent)
Zdarzenie
Odbiorca
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import java.awt.*;
import java.awt.event.*;
public final class EventIntro {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JButton cb= new JButton("Close");
cb.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent E ) {
frame.dispose();
System.exit(0);
}
} );
frame.add(cb);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
} );
}
Przykład: EventIntro
}
Odbiorcy zdarzeń
Definicja
class Closer implements ActionListener() {
public void actionPerformed( ActionEvent E ) {
frame.dispose();
System.exit(0);
}
}
Użycie
...
element.addActionListener( new Closer() );
...
Odbiorcy zdarzeń
cb.addMouseListener(
new MouseAdapter() {
public void mouseEntered( MouseEvent e ) {
Źródło
(np. Komponent)
cb.setText("Don't click me!");
cb.repaint();
}
public void mouseExited( MouseEvent e ) {
Odbiorca
cb.setText("Uffffffffff!");
cb.repaint();
new Thread(
Odbiorca
new Runnable() {
public void run() {
try {
Źródło
Odbiorca
Thread.sleep( 2000 );
(np. Komponent)
} catch( Exception x ) {}
cb.setText("Don't touch me!");
cb.repaint();
}
cb.addActionListener( new ActionListener() {
}).start();
public void actionPerformed( ActionEvent E ) {
}
frame.dispose();
} );
System.exit(0);
}
} );
Przykład: EventMulti
Applety
●
●
●
Applet (aplet) to prawie-program, który działa w
otoczeniu innego programu (najczęściej
przeglądarki internetowej).
Określenie zostało wprowadzone w języku
AppleScript (Apple, Mac OS, 1993), ale
spopularyzowane przez applety Javy (Sun, 1995).
Applety Javy służą przede wszystkim do
bezpiecznego sieciowego programowania po
stronie klienta.
Przykład: Applet1
Applety
// <applet code=Applet1 width=100 height=30></applet>
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Applet1 extends JApplet {
public void init() {
final JTextField c= new JtextField(
"Enter your name here and press <ENTER>");
c.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e ) {
c.setText("Hello " +
((JTextField)e.getSource()).getText()+", nice to meet you!");
}
}
);
getContentPane().add( c );
}
}
Komunikacja apletu z otoczeniem
Otoczenie appletu przesyła mu szereg komunikatów,
czyli wywołujemetody appletu. Najwazniejsze z
nich to:
–
–
–
–
–
init() - wywoływana po ładowaniu appletu,
start() - wywoływana za każdym razem, gdy applet
staje się widoczny,
stop() - wywoływana, gdy applet staje się
niewidoczny,
destroy() - wywoływana, gdy applet jest usuwany z
przeglądarki
paint() - wywoływana w celu przerysowania appletu
Przykład: Applet2 i appletviewer
Ograniczenia GUI appletu
●
Applet działa w oknie innego programu:
–
kolor tła może się różnić
–
może być konieczne wywołanie validate() aby
komponety stały się widoczne.
●
Applet ma wielkość określaną przez przeglądarkę.
●
Applet (JApplet) jest podklasą java.awt.Panel.
●
●
Kod appletu (i jego składników) jest ładowany z
sieci, co może być dość wolne.
URL kodu appletu i jego dokumentu są
wykorzystywane do dostępu do innych
składników (dźwięków, obrazków,..) Przykład: ShowMethods
Bezpieczeństwo
●
●
●
●
●
●
Applety nie mogą doładowywać bibliotek, ani definiować metod
natywnych. Mogą używać tylko własnego kodu i API dostarczanego
przez przeglądarkę: przyjmuje się, że przeglądarka powinna
dostarczać min. pakietów java.*
Applety nie powinny “dotykać” lokalnego dysku. Mogą natomiast
dostawać się do plików poprzez pełny URL.
Applety mogą łączyć się co najwyżej z własnym serwerem (obchodzi
się to przez komunikację za pośr. serwera).
Applet nie powinien uruchamiać żadnych programów po stronie
klienta.
Applet nie powinien sprawdzać niektórych zmiennych systemowych
klienta.
Okna otwierane przez applet wyglądają inaczej, niż własne okna
klienta.
Programowanie wizualne
●
●
●
●
●
●
●
●
Visual Basic
Borland Delphi
Java Netbeans
“Technologia” przeciągnij i upuść
Bardzo wydajne: jedno z podstawowych
narzędzi RAD
Tworzenie GUI z gotowych komponentów
Komponenty muszą być konfigurowalne
Język obiektowy jest naturalnie wygodnym
narzędziem do tworzenia komponentów
Netbeans
Netbeans

Podobne dokumenty