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; public class HelloSwing { Dawniej: frame.addwindowlistener( new WindowAdapter() { public void windowclosing( WindowEvent e) { System.exit(0); ); 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 ) { cb.settext("don't click me!"); cb.repaint(); public void mouseexited( MouseEvent e ) { cb.settext("uffffffffff!"); cb.repaint(); new Thread( new Runnable() { public void run() { try { Thread.sleep( 2000 ); catch( Exception x ) { cb.settext("don't touch me!"); cb.repaint(); ); ).start(); Źródło (np. Komponent) Źródło (np. Komponent) Odbiorca Odbiorca Odbiorca cb.addactionlistener( new ActionListener() { 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 Przykład: ShowMethods składników (dźwięków, obrazków,..)
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