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