Instrukcja laboratorium nr 4
Transkrypt
Instrukcja laboratorium nr 4
Przetwarzanie równoległe i rozproszone – ćwiczenie 3, część 2 Ćwiczenie 3 – część 2 Wprowadzanie danych, wyprowadzanie wyników w Java Interfejs graficzny SWING Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z metodą budowy interfejsu graficznego przy pomocy komponentów biblioteki Swing. Ćwiczenie to umoŜliwia nabycie umiejętności tworzenia interfejsów graficznych pozwalających w najprostszy sposób -wizualny - przedstawiać wyniki działającej aplikacji oraz komunikację z uŜytkownikiem Technologia, która jest najbardziej rozwijana i najbardziej uŜyteczna z punktu widzenia dostępnych moŜliwości oraz jest prawdopodobnie ostatnią biblioteką GUI (ang. graphical user interface) dla Javy 1. Wstęp teoretyczny Początkowo celem projektu biblioteki graficznego interfejsu uŜytkownika (GUI) w Java wersji l .0 było umoŜliwienie programiście tworzenie interfejsu, który by wyglądał dobrze na wszystkich platformach. PoniewaŜ cel ten trudno było osiągnąć, firma SUN stale rozwijała projekt w ramach tworzenia GUI dla Javy. W wersji l .1 Java zawiera model zdarzeń AWT (ang. abstract windows toolkit), który ma sensowne podejście obiektowe oraz standard JavaBeans komponentowy model programowania, zorientowany na łatwe wykorzystanie w wizualnych środowiskach programistycznych. W wersji 2 Java zawiera zmienioną bibliotekę AWT przez wymianę wszystkiego na Java Foundation Classes (JFC), którego część dotycząca GUI jest nazywana „Swing". Swing jest to bogaty zbiór łatwych w uŜyciu i zrozumiałych komponentów, z których moŜna stworzyć satysfakcjonujący interfejs. Zawiera wszelkie komponenty, jakie moŜna się spodziewać po nowoczesnym interfejsie uŜytkownika - od przycisków zawierających obrazki, po drzewa i tabele. Jest to duŜa biblioteka, ale jest tak zaprojektowana, aby jej złoŜoność była proporcjonalna do zastosowania -jeśli coś jest proste, to nie trzeba na to wiele kodu, jeśli się próbuje robić rzeczy bardziej skomplikowane, to kod staje się bardziej rozbudowany i złoŜony. Oznacza to łatwą dostępność ale teŜ duŜe moŜliwości. Swing obsługuje rozbudowany ,,look and feel" który pozwala dynamiczną zmianę wyglądu interfejsu uŜytkownika, aby zaspokoić oczekiwania uŜytkowników pracujących na róŜnych platformach i systemach operacyjnych. 11 Przetwarzanie równoległe i rozproszone – ćwiczenie 3, część 2 2. Tworzenie interfejsu graficznego. Interfejs został stworzony przy pomocy apletu, który jest uruchamiany na lokalnej stronie www przy pomocy przeglądarki internetowej. Aplet, w odróŜnieniu od aplikacji, ma ograniczone moŜliwości działania. Posiada szereg zabezpieczeń, które m.in. uniemoŜliwiają uszkodzenia w systemie. PoniŜej znajduje się kod apietu (plik Aplet.java). // importowanie potrzebnych bibliotek import javax.swing. * ; import java.awt.*; import java.awt.event.*; // biblioteka podstawowa pakietu Swing // biblioteka do obsługi zdarzeń // tworzenie apletu public class Aplet extends JApplet { JButton bl, b2, b3; // deklarowanie przycisków JLabel el = new JLabel (""); JTextField tl = new JTextField (15 ) ; // metoda inicjująca środowisko apletu przed jego startem public void init ( ) { // przypisanie zdarzeń do przycisków b1 = new JButton ("Utw\uOOF3rz gniazdko klienta"); b1.addActionListener ( new ActionListener( ) { public void actionPerformed (ActionEvent e) { e1. setText ("Roz\ u0141\ u0105czanie ..." ) ; b1. setEnabled(false); b2. setEnabled(true) ; b3. set-Enabled (true) ; } }); b2 = new JButton ("Roz\u0142\u0105cz"); b2 . addActionListener ( new ActionListener ( ) { public void actionPerformed (ActionEvent e) { e1 . setText ( "Roz \ u0142 \ u0105czanie ..." b1 . setEnabled ( true ) ; b2 . setEnabled (false ) ; b3 . setEnabled ( false ) ; } ) ; } ) ; b2 . setEnabled ( false ) ; // zablokowanie przycisku b3 = new JButton ( "Wy \ u015Blij " ) ; b3 . addActionListener ( new ActionListener ( ) } public void actionPerformed ( ActionEvent e ) { e1 . setText ( "Wysy \ u0142anie ..." ) ; } } ); b3 . setEnabled ( false ) ; 12 Przetwarzanie równoległe i rozproszone – ćwiczenie 3, część 2 // umieszczenie elementów w aplecie Container cp = getContentPane (); // pobranie głównego kontenera apletu cp. setLayout ( new FlowLayout () );// przypisanie menedŜera rozkładu komponentów JPanel pl = new Jpanel (); // panel, w którym będą wszystkie elementy apletu pl . setLayout (new GridLayout ( 7,1) ); // p1 p1 pl pl p1 p1 p1 // przypisanie menedŜera dla panelu dodanie elementów do panelu .add (new JLabel ( " " ) ) ; .add (bl) ; .add (b2) ; .add (e1) ; .add (b3) ; .add (t1) ; .add (new JLabel ( " " ) ); cp.add (p1); // dodanie panelu z elementami do apletu W metodzie init () inicjowany jest aplet przed jego uruchomieniem. Zostają przypisane zdarzenia do przycisków apletu, których naciśnięcie powoduje blokowanie i odblokowywanie przycisków. Wszystkie elementy apletu znajdują się w panelu p1, który jest dołączany do kontenera apletu. W Javie mamy moŜliwość wielokrotnego zagnieŜdŜania komponentów, jednak czasem moŜe to prowadzić do spowolnienia działania apletu czy aplikacji. 3. Uruchomienie apletu Aby uruchomić aplet, naleŜy go skompilować poleceniem javca.exe Aplet.java, oraz umieścić jego wywołanie na stronie www. PoniŜej znajduje się przykładowe wywołanie. < ! DOCTYPE HTML PUBLIC "-/ /W3C./ / DTD HTML 4 . 0 Transitional//EN"> <html> <head> <title>Klient</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-2"> </head> <body bgcolor="#aaaa88> <center> <applet code = "Java2.class" width = "380" height = "200"> </applet> </center> </body> </html> 4. Rozbudowa apletu - budowa aplikacji. KaŜdy aplet moŜna zamienić w aplikację, poniŜej podany jest szkielet tworzenia aplikacji. import java.awt.*; import javax.swing.*; 13 Przetwarzanie równoległe i rozproszone – ćwiczenie 3, część 2 import java.awt.event.*; class App extends JFrame{ public App(){ addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ dispose(); System.exit(0); } }); } public static void main (String args[ ]){ System.out.println ("Starting Application..."); App mainFrame = new . App(); mainFrame . setSize (400, 400); mainFrame . setTitle ("App"); mainFrame . set Visible (true); } } 5. Dodatkowe przydatne elementy Deklaracja pola tekstowego: JTextArea taTextOut = new JTextArea(10,60); Pozwolenie lub zabronienie edycji pola tekstowego taTextOut.setEditable(false); Dodanie scroll do pola tekstowego add(new JScrollPane(TextOutTest)); Metody zapisu i odczytu danych z pola tekstowego: JTextArea t_polecenie = new JTextArea(1,10); //Deklaracja pola tekstowego String dane = t_polecenie.getText(); //Pobranie tekstu z pola taTextOut.setText("test"); // Zapisanie danych do pola tekstowego taTextOut.append("message: "); //Dopisanie tekstu do pola 6. Zadanie do realizacji Uruchomić powyŜszy program, przeanalizować zawarte w nim mechanizmy. Przerobić ten aplet na aplikację oraz dokonać modyfikacji tak, aby program z ćwiczenia 3.1 pracował w oparciu o interfejs graficzny. 7. Podsumowanie Przygotować sprawozdanie opisujące doświadczenia i testy z uruchomienia przygotowanego programu przykładowego i stworzonego na zajęciach. 8. Literatura - Barry Boone, „JAVA dla programistów C i C++” 14