Top Banner
1 JAVA - Serializacja obiektów, interfejs Serializable import java.io.*; import java.util.*; public class Prog88{ public static void main(String [] arg) throws IOException, ClassNotFoundException { Random r = new Random(); NamedBox inBox1 = new NamedBox(r.nextInt()); NamedBox inBox2 = new NamedBox(r.nextInt()); System.out.println(" inBox1 = " + inBox1.showNamedBox() + " inBox2 = " + inBox2.showNamedBox()); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obiekty.dat")); out.writeObject("zapis Box1 i Box 2"); out.writeObject(inBox1); out.writeObject(inBox2); out.close(); ObjectInputStream inp = new ObjectInputStream(new FileInputStream("obiekty.dat")); String s = (String)inp.readObject(); System.out.println(s); NamedBox in1 = (NamedBox)inp.readObject(); System.out.println(" in1 = " + in1.showNamedBox()); NamedBox in2 = (NamedBox)inp.readObject(); System.out.println(" in2 = " + in2.showNamedBox()); inp.close(); class Box implements Serializable { private int i ; Box(int x ) { i =x; } int showInBox() { return i;} } class NamedBox implements Serializable { Box a; NamedBox(int x) { a = new Box(x); } int showNamedBox() { return a.showInBox();} } Obiekt jest odtwarzany wyłącznie na podstawie zapisu, nie są wołane konstruktory
41

JAVA - Serializacja obiektów, interfejs Serializable

Jan 12, 2016

Download

Documents

Cheri

JAVA - Serializacja obiektów, interfejs Serializable. class Box implements Serializable { private int i ; Box(int x ) { i =x; } int showInBox() { return i;} } class NamedBox implements Serializable { Box a; NamedBox(int x) { a = new Box(x); } int showNamedBox() { return - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: JAVA - Serializacja obiektów, interfejs  Serializable

1

JAVA - Serializacja obiektów, interfejs Serializable

import java.io.*; import java.util.*;

public class Prog88{

public static void main(String [] arg) throws IOException, ClassNotFoundException {

Random r = new Random();

NamedBox inBox1 = new NamedBox(r.nextInt());

NamedBox inBox2 = new NamedBox(r.nextInt());

System.out.println(" inBox1 = " + inBox1.showNamedBox() +

" inBox2 = " + inBox2.showNamedBox());

ObjectOutputStream out =

new ObjectOutputStream(new FileOutputStream("obiekty.dat"));

out.writeObject("zapis Box1 i Box 2"); out.writeObject(inBox1);

out.writeObject(inBox2);

out.close();

ObjectInputStream inp = new ObjectInputStream(new FileInputStream("obiekty.dat"));

String s = (String)inp.readObject(); System.out.println(s);

NamedBox in1 = (NamedBox)inp.readObject(); System.out.println(" in1 = " + in1.showNamedBox());

NamedBox in2 = (NamedBox)inp.readObject(); System.out.println(" in2 = " + in2.showNamedBox());

inp.close();

}} //Prog88

class Box implements Serializable { private int i ; Box(int x ) { i =x; } int showInBox() { return i;}}

class NamedBox implements Serializable { Box a; NamedBox(int x) { a = new Box(x); } int showNamedBox() { return a.showInBox();}}

Obiekt jest odtwarzany wyłącznie na podstawie zapisu, nie są wołane konstruktory

Page 2: JAVA - Serializacja obiektów, interfejs  Serializable

2

JAVA - kontola serializacji, interfejs Externalizable

import java.io.*; import java.util.*;

public class Prog89{

public static void main(String [] arg) throws IOException, ClassNotFoundException {

Random r = new Random();

Test in1 = new Test(r.nextInt());

Test in2 = new Test(r.nextInt());

System.out.println(" in1 = " + in1.show() +

" in2 = " + in2.show());

ObjectOutputStream out =

new ObjectOutputStream

(new FileOutputStream("obiekty.dat"));

out.writeObject(in1); out.writeObject(in2);

out.close();

System.out.println(" po odczycie z pliku : " );

ObjectInputStream inp =

new ObjectInputStream(new FileInputStream("obiekty.dat"));

Test in3 = (Test)inp.readObject(); System.out.println(" in1 = " + in3.show());

Test in4 = (Test)inp.readObject(); System.out.println(" in2 = " + in4.show());

inp.close();

}

} //Prog89

class Test implements Externalizable { private int i ; private String s; public Test() {System.out.println("domyślny"); }

// musi być publiczny !!!! Test(int x ) { i =x; s = (new Integer(i)).toString(i); } String show() { return s;}

public void writeExternal(ObjectOutput out) throws IOException{ out.writeInt(i); out.writeObject(s); }

public void readExternal(ObjectInput inp) throws IOException, ClassNotFoundException { i = inp.readInt(); s = (String)inp.readObject(); } }

Wywoływany jest konstruktor domyślny !!!!!!!!!!!

zapis i odczyt na podstawie writeExternal i readExternal

Page 3: JAVA - Serializacja obiektów, interfejs  Serializable

3

JAVA - wyłączenie z serializacji poprzez transient

import java.io.*; import java.util.*;

public class Prog90{

public static void main(String [] arg) throws IOException, ClassNotFoundException {

Test in1 = new Test(1,"pierwszy");

Test in2 = new Test(2,"drugi");

System.out.println(" in1 = " + in1.showS() + " " + in1.showI() +

" in2 = " + in2.showS() + " " + in2.showI());

ObjectOutputStream out =

new ObjectOutputStream(new FileOutputStream("obiekty.dat"));

out.writeObject(in1); out.writeObject(in2);

out.close();

System.out.println(" po odczycie z pliku : " );

ObjectInputStream inp = new ObjectInputStream(new FileInputStream("obiekty.dat"));

Test in3 = (Test)inp.readObject();

System.out.println(" in3 = " + in3.showS()+" "+in3.showI()); // -> pierwszy 0

Test in4 = (Test)inp.readObject();

System.out.println(" in4 = " + in4.showS()+" "+in4.showI()); // -> drugi 0

inp.close();

}}// Prog90

class Test implements Serializable { private transient int i ; // stos. dla Serializable private String s; Test(int x, String t ) { i =x; s = t; } String showS() { return s;} int showI() { return i ;}}

Page 4: JAVA - Serializacja obiektów, interfejs  Serializable

4

JAVA - serializacja i deserializacja sieci obiektów do pojedynczego strumienia

import java.io.*; import java.util.*;

public class Prog91{

public static void main(String [] arg) throws IOException, ClassNotFoundException {

Group l1 = new Group(1);

Group l2 = new Group(2);

Student s1 = new Student("Marek",l1);

Student s2 = new Student("Pawel",l1);

Student s3 = new Student("Olek ",l2);

s1.whereIs(); s2.whereIs(); s3.whereIs();

ByteArrayOutputStream byteout = new ByteArrayOutputStream();

ObjectOutputStream out = new ObjectOutputStream(byteout);

out.writeObject(s1); out.writeObject(s2); out.writeObject(s3);

out.close();

System.out.println(" po odczycie ze strumienia : " );

ByteArrayInputStream byteinp = new ByteArrayInputStream(byteout.toByteArray());

ObjectInputStream inp = new ObjectInputStream(byteinp);

Student s4 = (Student)inp.readObject(); // grupa l1

Student s5 = (Student)inp.readObject(); // grupa l1

Student s6 = (Student)inp.readObject();

s4.whereIs(); s5.whereIs(); s6.whereIs();

inp.close(); }} //Prog91

class Group implements Serializable { int nr; Group(int n ) { nr = n;} String gAddres() { return super.toString();} int inGroup() {return nr;}}class Student implements Serializable { String s; Group g ; Student(String t, Group x ) { s = t; g = x;} void whereIs() {System.out.println(s + " is in group nr " + g.inGroup() +" ” g.gAddres());}}

Obiekt Group który zawierają s4 i s5 jest tworzony tylko raz

Page 5: JAVA - Serializacja obiektów, interfejs  Serializable

5

JAVA - serializacja i deserializacja sieci obiektów - do wielu strumieni (1)

public class Prog92{

public static void main(String [] arg) throws IOException, ClassNotFoundException {

Group l1 = new Group(1);

Group l2 = new Group(2);

Group l3 = new Group(3);

ArrayList student = new ArrayList();

student.add(new Student("Marek",l1)); student.add(new Student("Pawel",l1)); student.add(new Student("Olek ",l2));

for(int i = 0; i < student.size(); ((Student)student.get(i++)).whereIs());

ByteArrayOutputStream byteout1 = new ByteArrayOutputStream();

ObjectOutputStream out1 = new ObjectOutputStream(byteout1);

out1.writeObject(student); //kopia poprzez serializację

out1.close();

ByteArrayOutputStream byteout2 = new ByteArrayOutputStream();

ObjectOutputStream out2 = new ObjectOutputStream(byteout2);

out2.writeObject(student);

out2.close();

//-> kontynuacja

Page 6: JAVA - Serializacja obiektów, interfejs  Serializable

6

JAVA - serializacja i deserializacja sieci obiektów - do wielu strumieni (2)

System.out.println(" \npo odczycie ze strumienia 1 : " );

ByteArrayInputStream byteinp1 = new ByteArrayInputStream(byteout1.toByteArray());

ObjectInputStream inp1 = new ObjectInputStream(byteinp1);

ArrayList student1 = (ArrayList)inp1.readObject();

for(int i = 0; i < student1.size(); ((Student)student1.get(i++)).whereIs());

inp1.close();

System.out.println(" \npo odczycie ze strumienia 2 : " );

ByteArrayInputStream byteinp2 = new ByteArrayInputStream(byteout2.toByteArray());

ObjectInputStream inp2 = new ObjectInputStream(byteinp2);

ArrayList student2 = (ArrayList)inp2.readObject();

for(int i = 0; i < student2.size(); ((Student)student2.get(i++)).whereIs());

inp2.close();

}

} //Prog92

Deserializując obiekty z różnych strumieni system nie jest w stanie stwierdzić identyczności tych obiektów

Page 7: JAVA - Serializacja obiektów, interfejs  Serializable

7

JAVA - serializacja i deserializacja sieci obiektów - do wielu strumieni (3)

class Group implements Serializable {

int nr;

Group(int n ) { nr = n;}

String gAddres() { return super.toString();}

int inGroup() {return nr;}

}

class Student implements Serializable { String s; Group g ; Student(String t, Group x ) { s = t; g = x;} String sAddres() { return super.toString();} void whereIs() {System.out.println(s + " adress = " + sAddres() + " is in group nr " + g.inGroup() +" " + g.gAddres() );}}

W konsekwencji tworzonych jest dwa razy więcej obiektów

Page 8: JAVA - Serializacja obiektów, interfejs  Serializable

8

JAVA - Aplety

Generalne zasady, aplet nie może:

- odczytywać ani zapisywać plików na komputerze użytkownika,

- komunikować się z inną witryną WWW niż ta, z której został załadowany,

- uruchamiać żadnych programów na komputerze użytkownika,

- ładować ani pobierać z komputera użytkownika żadnych programów.

Aplety powinny być pakowane w pliki JAR .

Aplet:

działa jako część przeglądarki sieciowej i potrafi reagować na takie zdarzenia jak przeładowanie

strony WWW w jej oknie,

obsługuje graficzny interfejs użytkownika

W tej części wykładu:

-tworzenie i uruchamianie apletów,

-przykładowe komponenty i obsługa zdarzeń

-grafika i dźwięki w apletach,

-tworzenie łącz w apletach

Page 9: JAVA - Serializacja obiektów, interfejs  Serializable

9

JAVA – Aplety, główne metody

import java.awt.*; //Font, Color, Graphics2D

class Licz { int licz_Init; int licz_Start; int licz_Stop; int licz_Destroy; }

// wszystkie applety musza być public bo JApplet jest public

public class A1 extends javax.swing.JApplet {

private Licz licznik = new Licz();

public void init() { // inicjalizacja appletu

setBackground(Color.white); // zmiana kolory tła kontenera (tutaj appletu)

licznik.licz_Init++;}

public void start() { //uruchamianie appletu,

licznik.licz_Start++;} //przy ponownym ładowaniu strony

public void stop() { // zatrzymywanie appletu,

licznik.licz_Stop++;} // przy opuszczeniu strony

public void destroy() { // sprzątanie po applecie

licznik.licz_Destroy++;

try{

Thread.sleep(5000); //uśpienie na 5 sekund

} catch(InterruptedException e){

}}

/* umieszczenie appletu na stronie

<applet code = “A1.class” height = “ 100” width = “300”>

Musisz miec przegladarke z obsluga Javy

</applet>

*/

// wyświetlanie w oknie appletu

public void paint(Graphics oknoAp) { Graphics2D okno = (Graphics2D)oknoAp;

okno.drawString("Init : = " +

licznik.licz_Init, 5, 15); // współrzędne okno.drawString("Start : = "+

licznik.licz_Start, 5, 35);

okno.drawString("Stop : = "+

licznik.licz_Stop, 5, 55);

okno.drawString("Destroy : = "+

licznik.licz_Destroy, 5, 75);

}}

/* umieszczenie appletu na stronie WWW

<applet code = “A1.class” height = “ 100” width = “300”>

Musisz mieć przeglądarkę z obsługa Javy

</applet>

*/

Page 10: JAVA - Serializacja obiektów, interfejs  Serializable

10

JAVA – Aplety, przykład

import java.awt.*; //Font, Color, Graphics2D import java.util.*; // GregorianCalendar

public class A2 extends javax.swing.JApplet {

private Color bcolor = Color.red; private String lTime;

public void init() { setBackground(bcolor); lTime = new String("?"); }

public void paint(Graphics oknoAppletu) {

Graphics2D okno = (Graphics2D)oknoAppletu;

Font typC = new Font(„Arial",Font.BOLD, 20); //Arial, BOLD, rozmiar 20 pkt.

okno.setFont(typC);

GregorianCalendar day = new GregorianCalendar();

String cTime = day.getTime().toString();

okno.setColor(bcolor);

okno.drawString(lTime, 5, 25); // o współrzędnych x = 5, y = 25

okno.setColor(Color.black);

okno.drawString(cTime, 5, 25);

try{

Thread.sleep(1000); //uśpienie na 1 sekundę

} catch(InterruptedException e){ }

lTime = cTime;

repaint(); // ponowne wywołanie metody paint

}}

Page 11: JAVA - Serializacja obiektów, interfejs  Serializable

11

JAVA – Aplety, testowanie

Testowanie apletu:

Metoda 1)

/*

<applet code = A3 height = 100 width =300>

</applet>

*/

import java.awt.*;

public class A3 extends javax.swing.JApplet {

public void paint(Graphics oknoAppletu) {

Graphics2D okno = (Graphics2D)oknoAppletu;

okno.drawString("aplet test", 5, 25);

}

}

Wywołanie: appletviewer A3.java

import java.awt.*; import java.awt.event.*; import javax.swing.*;

Metoda 2)

class ExitWindow extends WindowAdapter {

public void windowClosing(WindowEvent e) { System.exit(0);}

}

public class A3 extends javax.swing.JApplet {

public void paint(Graphics oknoAppletu) {

Graphics2D okno = (Graphics2D)oknoAppletu;

okno.drawString("aplet test", 15, 5);

}

public static void main(String arg[]){

JApplet aplet = new A3();

JFrame ramka = new JFrame("moja ramka");

ramka.addWindowListener(new ExitWindow()); //obsługa zamknięcia

ramka.getContentPane().add(aplet); // dodanie jako składnika

ramka.setSize(100,100); // do kontenera ramka

aplet.init();

aplet.start();

ramka.setVisible(true);}}

Page 12: JAVA - Serializacja obiektów, interfejs  Serializable

12

JAVA – Aplety, umieszczanie na stronach WWW

<applet code = ”A3.class” height = ”100” width =”300”>

</applet>

code – nazwa głównej klasy apletu,

width – szerokość okna apletu,

height – wysokość okna apletu

Jeżeli pliki klas apletu znajdują się w innym folderze niż strona WWW, używa się atrybutu codebase

np. załadowanie klasy A3 z katalogu mapp:

<applet code = ”A3.class” codebase = ”mapp” height = ”100” width =”300”>

</applet>

Jeżeli ładowanie ma odbywać się z innej witryny WWW:

<applet code = ”A3.class” codebase = ”http://www.mojadomena.com/mojkatalog” height = ”100” width =”300”>

</applet>

Inne atrybuty znacznika <applet>

align – określa sposób wyrównania okna apletu w stosunku do strony WWW,

hspace – określa odstęp po lewej i prawej stronie okna apletu w stosunku do innych elementów strony ,

vspace – określa odstęp nad i pod oknem apletu.

<applet code = ”A3.class” height = ”100” width =”300” align = LEFT vspace = 50 hspace = 10>

</applet>

Page 13: JAVA - Serializacja obiektów, interfejs  Serializable

13

JAVA – Aplety, przekazywanie parametrów, JAR

<applet code = ”A4.class” height = ”100” width =”300”>

<param name = fonts value = ”TimesRoman”>

<param name = sizes value = ”24”>

</applet>

import java.awt.*;

import javax.swing.*;

public class A4 extends javax.swing.JApplet {

private String czcionka;

private int rozmiar;

public void init(){

czcionka = getParameter("fonts");

rozmiar = Integer.parseInt(getParameter("sizes"));

}

public void paint(Graphics oknoAppletu) {

Graphics2D okno = (Graphics2D)oknoAppletu;

Font type = new Font(czcionka,Font.BOLD, rozmiar);

okno.setFont(type);

okno.drawString("aplet test", 5, 25);

}

}

<applet code = ”A4.class” archives = ”A4.jar”

height = ”100” width =”30

<param name = fonts value = ”TimesRoman”>

<param name = sizes value = ”24”>

</applet>

Tworzenie archiwum:

jar cf A4.jar *.class //wszystkie pliki class

c – tworzenie archiwum,

f – z podaną nazwą,

Page 14: JAVA - Serializacja obiektów, interfejs  Serializable

14

JAVA – Aplety, JAVA Plug-in

Aby aplety pisane w języku Java 2 mogły działać poprawnie należy korzystać z interpretera Java Plug-in. Aby poprawnie

uruchomić stronę korzystającą z apletów napisanych z wykorzystaniem narzędzi zaimplementowanych po raz pierwszy w

Java 2 muszą być spełnione warunki:

- użytkownik poprawnie zainstaluje Java Plug-in,

- na stronie WWW istnieje fragment kodu inicjujący uruchomienie apletów przez Java Plug-in.

Generowanie kodu wymaganego do obsługi apletów przez Java Plug-in:

- wstaw znacznik <applet> lub <object > na strone WWW

-użyj programu HTMLConverter (www.sun.com)

- przekonwertuj plik HTML do postaci mogącej obsługiwać Java Plug-in

java HTMLConverter dokument.html

Uwaga! użycie HTMLConverter nadpisuje istniejący kod HTML

Page 15: JAVA - Serializacja obiektów, interfejs  Serializable

15

JAVA – Aplety, biblioteka Swing-GUI

/*<applet code = A5 width = 200 height = 150 >

</applet>*/

import java.awt.*; import javax.swing.*;

public class A5 extends javax.swing.JApplet {

private JButton b1 = new JButton("OK");

private JButton b2 ;

private JLabel t = new JLabel("To etykieta");

private JTextField tp = new JTextField("To jest pole tekstowe");

private JTextArea ta = new JTextArea(" To jest obszar tekstowy");

public void init(){

Container p = getContentPane(); //wszystko jest dodawane do kontenera

p.setLayout(new FlowLayout()); // wersja A – bez tej linii

p.add(b1);

ImageIcon i = new ImageIcon("moj.gif");

b2= new JButton("OK",i);

p.add(b2);

p.add(t);

p.add(tp);

p.add(ta);

}}

Wersja A- ostatni składnik przesłania poprzednie

Wersja B – zastosowano szablon

Page 16: JAVA - Serializacja obiektów, interfejs  Serializable

16

JAVA – Aplety, biblioteka Swing-GUI

import java.awt.*;

import javax.swing.*;

public class A6 extends javax.swing.JApplet {

private JLabel t = new JLabel("OBSZAR PRZEWIJANY");

private JTextArea ta = new JTextArea(10,10);

public void init(){

Container p = getContentPane();

p.setLayout(new FlowLayout());

//paski przewijania dla jednego z komponentów

JScrollPane pta = new JScrollPane(ta,

ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

JScrollBar b = new JScrollBar(JScrollBar.HORIZONTAL,5,0,0,10); // 5 - wart. start

p.add(b); // 0 - rozmiar suwaka

p.add(t); // 0-10 zakres

p.add(pta);

}

}

Page 17: JAVA - Serializacja obiektów, interfejs  Serializable

17

JAVA – Aplety, biblioteka Swing-GUI

import java.awt.*;

import javax.swing.*;

public class A7 extends javax.swing.JApplet {

private JLabel t = new JLabel("OPCJE i POLA WYBORU");

public void init(){

Container p = getContentPane();

p.setLayout(new FlowLayout());

JCheckBox b = new JCheckBox("wybierz"); //opcja

JRadioButton []tab = new JRadioButton [3]; //pola wyboru

tab[0] = new JRadioButton("one");

tab[1] = new JRadioButton("two",true);

tab[2] = new JRadioButton("three");

JComboBox ocena = new JComboBox(); //lista rozwijana

for(int i = 2; i<=5;i++) ocena.addItem(new Integer(i));

p.add(t);

p.add(b);

for(int i = 0; i<=2;i++)p.add(tab[i]);

p.add(ocena);

}

}

Page 18: JAVA - Serializacja obiektów, interfejs  Serializable

18

JAVA – Aplety, styl interfejsu

import java.awt.*; import java.util.*; import javax.swing.*;

public class A8 extends javax.swing.JApplet {

private JLabel t;

public void init(){

try {

UIManager.setLookAndFeel( // styl METAL jest domyślny

UIManager.getCrossPlatformLookAndFeelClassName());

}catch (Exception e) {System.err.println("nie można");} */

/* try {

UIManager.setLookAndFeel(

UIManager.getSystemLookAndFeelClassName()); // styl zgodny z Systemem

}catch (Exception e) {System.err.println("nie można");}

*/

Container p = getContentPane();

t = new JLabel("STYLE UŻYTKOWNIKA");

p.add(t);

}

}

Page 19: JAVA - Serializacja obiektów, interfejs  Serializable

19

JAVA – Aplety, okna dialogowe

import java.awt.*; import java.util.*; import javax.swing.*;

public class A9 extends javax.swing.JApplet {

public void init(){

// null oznacza wyrównanie do środka ekranu

int value1 = JOptionPane.showConfirmDialog(null,"Is OK?");

value2 = JOptionPane.showConfirmDialog(null,"What is ?”,

"Message",JOptionPane.YES_NO_CANCEL_OPTION,

JOptionPane.ERROR_MESSAGE);

String s = JOptionPane.showInputDialog(null,"Hasło?");

JButton [] bb = new JButton[3]; bb[0] = new JButton("Tak");

bb[1] = new JButton("Nie"); bb[2] = new JButton("Nie odpowiem");

value1 = JOptionPane.showOptionDialog(null, "Palisz?","Ankieta",0,

JOptionPane.QUESTION_MESSAGE,null, //brak własnej ikony

bb,bb[2]); // 0 - znaczy ze będą inne przyciski

JOptionPane.showMessageDialog(null,"The end");

}}

Page 20: JAVA - Serializacja obiektów, interfejs  Serializable

20

JAVA – Aplety, szablony rozmieszczenia

import java.awt.*; import java.util.*; import javax.swing.*;

public class A10 extends javax.swing.JApplet {

public void init(){

Container p = getContentPane();

//A p.setLayout(new FlowLayout(FlowLayout.LEFT));

//B p.setLayout(new GridLayout(2,2)); //dwa wiersze , dwie kolumny

p.setLayout(new BorderLayout());

JButton [] bb = new JButton[3];

bb[0] = new JButton("Tak");

bb[1] = new JButton("Nie");

bb[2] = new JButton("Nie odpowiem");

//dla A i B for(int i = 0; i <=2; i++) p.add(bb[i]);

// poniższe dla C

p.add("North",bb[0]);

p.add("East",bb[1]);

p.add("West",bb[2]);

p.add("West",new JButton("WEST"));

p.add("South",new JButton("South"));

p.add("Center",new JButton("center"));

}}

Page 21: JAVA - Serializacja obiektów, interfejs  Serializable

21

JAVA – Aplety, szablony rozmieszczenia

import java.awt.*; import java.util.*; import javax.swing.*;

public class A11 extends javax.swing.JApplet {

public void init(){

Container p = getContentPane();

CardLayout cl = new CardLayout();

p.setLayout(cl);

JPanel jp1 = new JPanel();

JPanel jp2 = new JPanel();

jp1.setLayout(new FlowLayout(FlowLayout.LEFT));

jp2.setLayout(new FlowLayout(FlowLayout.RIGHT));

JButton [] bb = new JButton [] {new JButton("Tak"),new JButton("Nie"),new JButton("Nie odpowiem")};

for(int i = 0; i <=2; i++){

jp1.add(bb[i]); jp2.add(bb[i]);}

p.add("pierwsza",jp1);

p.add("druga" ,jp2);

cl.show(p,"druga"); //konieczna do wyświetlenia danej karty

}

}

Istnieje jeszcze szablon GridBagLayout który jest rozszerzeniem GridLayout

Page 22: JAVA - Serializacja obiektów, interfejs  Serializable

22

JAVA – Aplety, obsługa zdarzeń

Zarządcy zdarzeń:

ActionListener – obsługuje zdarzenia generowane na rzecz danego składnika, np..kliknięcie przycisku,

AdjustmentListener – dla zdarzeń generowanych w momencie zmiany stanu składnika (np. przesunięcie suwaka pola ),

FocusListener – dla zdarzeń generowanych w powiązaniu ze zmianą aktywne – nieaktywne,

ItemListener – dla zdarzeń związanych z zaznaczaniem pola wyboru,

KeyListener – dla zdarzeń związanych z wejściem z klawiatury,

MouseListener – dla zdarzeń generowanych przez myszkę, kliknięcie, opuszczenie pola

MouseMotionListener – dla zdarzeń generowanych w czasie przesuwania myszki nad składnikami,

WindowListener – dla zdarzeń generowanych przez okno, np.. maksymalizacja okna.

Wiązanie składnika z zarządcą:

addActionListener(), np.dla JButton, JCheckBox, JComboBox, JTExtField, JRadioButton,

addAdjustmentListener(), dla JScrollBar,

addFocusListener(), dla wszystkich składników pakietu Swing,

addItemListener(), dla składników JButton, JCheckBox, JComboBox, JRadioButton,

addKeyListener(), dla wszystkich składników pakietu Swing,

addMouseListener(), dla wszystkich składników pakietu Swing,

addMouseMotionListener(), dla wszystkich składników pakietu Swing,

addWindowListener() – dla obiektów JWindow i JFrame.

Page 23: JAVA - Serializacja obiektów, interfejs  Serializable

23

JAVA – Aplety, obsługa zdarzeń

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class A12 extends javax.swing.JApplet {

JLabel jl,title;

JButton [] bb;

public void init(){

Container p = getContentPane();

p.setLayout(new FlowLayout());

title = new JLabel("Wybierz swój ulubiony język programowania");

bb = new JButton [] {new JButton("Pascal"),new JButton("Java"),new JButton("C++")};

jl = new JLabel(" ");

p.add(title);

for(int i = 0; i <=2; i++) {

p.add(bb[i]);

bb[i].addActionListener(new ReAction()); //ustawienie przechwytywania zdarzeń

}

p.add(jl);

}

class ReAction implements ActionListener{

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton)

jl.setText("Mój faworyt to:

"+((JButton)e.getSource()).getText());

repaint();

}

}//koniec wewnętrznej

}

Page 24: JAVA - Serializacja obiektów, interfejs  Serializable

24

JAVA – Aplety, obsługa zdarzeń

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class A13 extends javax.swing.JApplet {

private JTextField t = new JTextField(20);

public void init(){

Container p = getContentPane();

p.setLayout(new FlowLayout());

//pola wyboru zostaną zgrupowane, tylko jeden może być wybrany

ButtonGroup tabG = new ButtonGroup();

JRadioButton [] tab = new JRadioButton [3];

tab[0] = new JRadioButton("Kowalski");

tab[1] = new JRadioButton("Nowak",true);

tab[2] = new JRadioButton("Anonymus");

ReAction ra = new ReAction();

JComboBox ocena = new JComboBox();

for(int i = 2; i<=5;i++) {

ocena.addItem(""+i);

ocena.addItemListener(ra);

}

for(int i = 0; i < tab.length; i++){

tab[i].addItemListener(ra);

tabG.add(tab[i]); //dodanie do grupy

p.add(tab[i]); // dodanie do kontenera

}

p.add(ocena);

p.add(t);

}

class ReAction implements ItemListener{

private String cname;

private String state;

public void itemStateChanged(ItemEvent e){

if (e.getSource() instanceof JRadioButton) {

cname = ((JRadioButton)e.getSource()).getText();

t.setText(cname + state );

}

else {

state = (String)e.getItem();

t.setText(cname + state);

}

repaint();

}

}}

Page 25: JAVA - Serializacja obiektów, interfejs  Serializable

25

JAVA - Aplety

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class A14 extends javax.swing.JApplet {

int x,y;

public void init(){

Container p = getContentPane();

JPanel panel = new JPanel();

ReAction ra = new ReAction();

panel.addMouseListener(ra);

p.add(panel);

}

public void paint(Graphics oknoAppletu) {

Graphics2D okno = (Graphics2D)oknoAppletu;

okno.drawString("tutaj", x, y);

}

}

class ReAction implements MouseListener{

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mousePressed(MouseEvent e){}

public void mouseReleased(MouseEvent e){}

public void mouseClicked(MouseEvent e){

if (e.getClickCount()==2){

x = e.getX();

y = e.getY();

repaint();

}

}

Page 26: JAVA - Serializacja obiektów, interfejs  Serializable

26

JAVA – Aplety, zdarzenia

public class A15 extends javax.swing.JApplet {

int licznik = 0;

JTextField pole = new JTextField(10);

public void init(){

Container p = getContentPane();

p.add(pole);

JFrame ramka1 = new JFrame("Ramka1");

JButton p1 = new JButton("pierwszy");

ReAction a = new ReAction();

ramka1.setSize(150,150);

ramka1.addWindowListener(a);

ramka1.getContentPane().add(p1);

ramka1.setVisible(true);

}

public void paint(Graphics oknoAppletu) {

Graphics2D okno = (Graphics2D)oknoAppletu;

pole.setText(Integer.toString(licznik));

}

class ReAction implements WindowListener{

public void windowOpened(WindowEvent e){}

public void windowClosed(WindowEvent e){}

public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){}

public void windowActivated(WindowEvent e){

licznik++; repaint();

}

public void windowDeactivated(WindowEvent e){

repaint(); }

public void windowClosing(WindowEvent e){}

}

}

Page 27: JAVA - Serializacja obiektów, interfejs  Serializable

27

JAVA – biblioteka net, identyfikacja

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*;

public class Pn1 {

private static JFrame ramka = new JFrame("Ramka");

private static JButton ident = new JButton("Wywolaj identyfikacje");

private static JTextField adrIP = new JTextField(30);

public static void main(String [] arg){

class Reaction implements ActionListener{

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton) { try {

InetAddress adres = InetAddress.getByName("skrzat"); //skrzat to nazwa mojego lapt

adrIP.setText(adres.toString());

} catch (Exception E) {}

} } }//wewnętrzna

ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ramka.getContentPane().setLayout(new FlowLayout());

ramka.getContentPane().add(ident);

ramka.getContentPane().add(adrIP);

ramka.setSize(500,100);

ramka.setVisible(true);

ident.addActionListener(new Reaction());

} }

Inne sposoby pozyskania lokalnego adresu IP:

InetAddress.getByName(null);

InetAddress.getByName ("localhost");

InetAddress.getByName ("127.0.0.1");

Page 28: JAVA - Serializacja obiektów, interfejs  Serializable

28

JAVA – Aplety, adres URL

import javax.swing.*; import java.net.*;

public class A16 extends javax.swing.JApplet {

JButton ident = new JButton("Jestem z .....");

JTextField adres = new JTextField(20);

class Reaction implements ActionListener{

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton)

{

URL adrU = getCodeBase(); // adres URL foldera z plikiem A16.class

adres.setText(adrU.toString());

}

}

}

public void init(){

Container p = getContentPane();

p.setLayout(new FlowLayout());

p.add(ident);

p.add(adres);

ident.addActionListener(new Reaction());

}

}

Metoda getDocumentBase() zwraca adres URL

reprezentujący stronę WWW która załadowała aplet

Page 29: JAVA - Serializacja obiektów, interfejs  Serializable

29

JAVA – Aplety, otwarcie adresu URL

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*;

public class A17 extends javax.swing.JApplet {

JButton b = new JButton("laduj z lokalnego");

JTextField t = new JTextField(20);

class Reaction implements ActionListener{

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton)

{

URL adres = getDocumentBase(); // z bieżącej lokalizacji

getAppletContext().showDocument(adres,"_blank"); // otwórz w nowym oknie przeglądarki

// getAppletContext().showDocument(adres); // w tym samym oknie

}

}

}

public void init(){

Container p = getContentPane();

p.setLayout(new FlowLayout());

p.add(b);

b.addActionListener(new Reaction());

}}

Page 30: JAVA - Serializacja obiektów, interfejs  Serializable

30

JAVA – połączenia poprzez adresy URL

public class A18 extends javax.swing.JApplet {

JButton b = new JButton("Polacz z WWW");

JTextField t1 = new JTextField();

JTextField t2 = new JTextField("------",15);

JLabel l1 = new JLabel(" Biezacy serwer WWW:");

JLabel l2 = new JLabel(" Polacz mnie z:");

JPanel [] tjp = new JPanel [2] ;

public void init(){

for(int i = 0; i < tjp.length; i++) tjp[i] = new JPanel();

Container p = getContentPane();

p.setLayout(new BorderLayout());

tjp[0].setLayout(new FlowLayout());

tjp[0].add(l1); tjp[0].add(t1); tjp[0].add(l2);

tjp[0].add(t2); tjp[1].add(b);

p.add("Center",tjp[0]);

p.add("South",tjp[1]);

t1.setText(getDocumentBase().toString());

b.addActionListener(new Reaction());

}

}

class Reaction implements ActionListener{

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton) {

try { // określona lokalizacja

URL adres = new URL(t2.getText());

getAppletContext().showDocument(adres);

} catch (MalformedURLException ex) {

JOptionPane.showMessageDialog(null,"Error URL"); }

}}

}

Page 31: JAVA - Serializacja obiektów, interfejs  Serializable

31

JAVA – połączenia poprzez adresy URL

public class Pn2 implements ActionListener {

private JFrame r = new JFrame("Autoryzacja dostępu");

private JButton ident = new JButton(”wywołaj identyfikacje");

private JTextField haslo = new JTextField(20);

private URL adres;

private JTextArea obszarT = new JTextArea(20,20);

BufferedReader czytaj;

String line = new String();

int nr = 102;

(bazowy kod jest zna następnej folii )

public static void main(String [] arg){

Pn2 ap = new Pn2();

ap.r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ap.r.getContentPane().setLayout(new FlowLayout());

ap.r.getContentPane().add(ap.haslo);

ap.r.getContentPane().add(ap.ident);

ap.r.getContentPane().add(ap.obszarTekstu);

ap.r.setSize(500,300);

ap.r.setVisible(true);

ap.ident.addActionListener(ap);

}

}

Page 32: JAVA - Serializacja obiektów, interfejs  Serializable

32

JAVA – połączenia poprzez adresy URL

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton)

{

try{

if ( Integer.parseInt(haslo.getText())!=nr) throw new Exception();

else {

adres = new URL("file:/c:/plik.txt"); // może to być też np. ftp://ath.bielsko.pl // czy też www://ath.bielsko/pl

try{

obszarT.setText("start połączenia");

URLConnection poloczenie = adres.openConnection();

poloczenie.connect();

StringBuffer buf = new StringBuffer();

czytaj = new BufferedReader(new InputStreamReader(poloczenie.getInputStream()));

while ((line = czytaj.readLine())!=null) buf.append(line+'\n');

obszarTekstu.setText(buf.toString());

} catch (IOException E) {

JOptionPane.showMessageDialog(null,"Error in connection"); }

}

} catch (MalformedURLException ex) {

JOptionPane.showMessageDialog(null,"Error URL"); }

catch (Exception E) {

JOptionPane.showMessageDialog(null,"Error password"); }

}}

Page 33: JAVA - Serializacja obiektów, interfejs  Serializable

33

JAVA – połączenia poprzez adresy URL

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton)

{

try{

if ( Integer.parseInt(haslo.getText())!=nr) throw new Exception();

else {

adres = new URL("file:/c:/plik.txt");

try{

obszarT.setText("start połączenia");

StringBuffer buf = new StringBuffer();

czytaj = new BufferedReader(new InputStreamReader(adres.openStream()));

while ((line = czytaj.readLine())!=null) buf.append(line+'\n');

obszarTekstu.setText(buf.toString());

} catch (IOException E) {

JOptionPane.showMessageDialog(null,"Error in connection"); }

}

} catch (MalformedURLException ex) {

JOptionPane.showMessageDialog(null,"Error URL"); }

catch (Exception E) {

JOptionPane.showMessageDialog(null,"Error password"); }

}}

Page 34: JAVA - Serializacja obiektów, interfejs  Serializable

34

JAVA – połączenia poprzez adresy URL

class ConButton extends Button { static int licznik = 0; public int nr ; ConButton(String n) { super(n); nr = licznik++;} } public class Pn4 implements ActionListener {

static ConButton b1 = new ConButton("Action READ I ");static ConButton b2 = new ConButton("Action READ II");static JTextArea tx = new JTextArea(10,10);static JLabel et = new JLabel("File to read I / II ?");static JTextField n = new JTextField(15);static JScrollPane js = new JScrollPane(tx);static JFrame ramka = new JFrame("Obsluga strumieni");

public static void main(String [] arg){ Pn4 apl = new Pn4(); apl.ramka.getContentPane().setLayout(new FlowLayout()); apl.ramka.getContentPane().add(b1); apl.ramka.getContentPane().add(b2); apl.ramka.getContentPane().add(et); apl.ramka.getContentPane().add(n); apl.ramka.getContentPane().add(tx); apl.b1.addActionListener(apl); apl.b2.addActionListener(apl); apl.ramka.setSize(500,500); apl.ramka.setVisible(true); apl.ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

Page 35: JAVA - Serializacja obiektów, interfejs  Serializable

35

JAVA – połączenia poprzez adresy URL

public void actionPerformed(ActionEvent e){ if (e.getSource() instanceof ConButton) { if ( ((ConButton)e.getSource()).nr == 0 ) { try { String line = new String(); URL adres = new URL(n.getText());

try{ BufferedReader czytaj = new BufferedReader(new InputStreamReader(adres.openStream())); while ((line = czytaj.readLine())!=null) tx.append(line+'\n'); //dopisuje } catch (IOException E) {JOptionPane.showMessageDialog(null,"Error in FILE connection"); } } catch (MalformedURLException ex) { JOptionPane.showMessageDialog(null,"Error URL"); } }else { try { String line = new String(); URL adres = new URL(n.getText()); URLConnection polaczenie = adres.openConnection(); polaczenie.connect(); try{ BufferedReader czytaj = new BufferedReader(new InputStreamReader(polaczenie.getInputStream())); while ((line = czytaj.readLine())!=null) tx.append(line+'\n'); //dopisuje } catch (IOException E) { JOptionPane.showMessageDialog(null,"Error in FILE connection"); } } catch (MalformedURLException ex) {JOptionPane.showMessageDialog(null,"Error URL"); } catch (IOException E) { JOptionPane.showMessageDialog(null,"Error in URLconnection"); } } // dodatkowo IOException dla URLConnection }}}

Page 36: JAVA - Serializacja obiektów, interfejs  Serializable

36

JAVA – Aplety i połączenia poprzez adresy URL

public class A19 extends javax.swing.JApplet {

private static JFrame ramka = new JFrame("Autoryzacja dostepu");

private static JButton ident = new JButton("Wywolaj identyfikacje");

private static JTextField haslo = new JTextField(20);

private static String wzor = new String("JAVA");

private static URL adres;

private static JTextArea obszarTekstu = new JTextArea(20,20);

private static BufferedReader czytaj;

private static String line = new String();

private static Pn2 aplikacja;

int nr = 102;

public static void run(){

ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ramka.getContentPane().setLayout(new FlowLayout());

ramka.getContentPane().add(haslo);

ramka.getContentPane().add(ident);

ramka.getContentPane().add(obszarTekstu);

ramka.setSize(500,300);

ramka.setVisible(true);

ident.addActionListener(aplikacja);

}

public void init()

{

aplikacja = new Pn2();

run();

}

class PException extends Exception {

PException() { super();}

}

Aplety mogą komunikować się wyłącznie z hostem z którego zostały

załadowane!!

Page 37: JAVA - Serializacja obiektów, interfejs  Serializable

37

JAVA –adresy URL

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton) {

try{

if ( Integer.parseInt(haslo.getText())!=nr) throw new PException();

else {

adres = new URL(getCodeBase(),"A9.java"); // punkt startowy to adres URL ==getCodeBase()

try{

obszarTekstu.setText("\n"+adres);

StringBuffer buf = new StringBuffer();

czytaj = new BufferedReader(new InputStreamReader(adres.openStream()));

while ((line = czytaj.readLine())!=null) buf.append(line+'\n');

obszarTekstu.setText(buf.toString());

}

catch (IOException E) {

JOptionPane.showMessageDialog(null,"Error in connection"); }

}

}catch (MalformedURLException ex) {

JOptionPane.showMessageDialog(null,"Error URL"); }

catch (PException E) {

JOptionPane.showMessageDialog(null,"Error password"); }

}}

}

Aplety mogą komunikować się wyłącznie z hostem z którego zostały

załadowane!!

Page 38: JAVA - Serializacja obiektów, interfejs  Serializable

38

JAVA – gniazda

import java.util.*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;

public class Pn5 implements ActionListener {

static JButton b = new JButton(" search FINGER info");static JTextField n = new JTextField(15);static JFrame ramka = new JFrame("Obsluga strumieni");

public static void main(String [] arg){ Pn5 apl = new Pn5(); apl.ramka.getContentPane().setLayout(new FlowLayout()); apl.ramka.getContentPane().add(b); apl.ramka.getContentPane().add(et); apl.ramka.getContentPane().add(n);

apl.n.setText("[email protected]"); // plik .plan apl.b.addActionListener(apl);

apl.ramka.setSize(500,500); apl.ramka.setVisible(true);

apl.ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

Socket gniazdo = new Socket(nazwa hosta , nr portu );

gniazdo.getInputStream()

gniazdo.getOutputStream()

Gniazdo.close()

Porty 1 – 1024 zarezerwowane są na usługi systemowe !!

(Assigned Numbers Authority)

Można używać dla swoich celów portów o numerach większych niż 1024 i mniejszych od 65535.

Niektóre wyższe numery portów są wykorzystywane->

www.sockets.com/services.htm

Page 39: JAVA - Serializacja obiektów, interfejs  Serializable

39

JAVA –gniazda

public void actionPerformed(ActionEvent e){

if (e.getSource() instanceof JButton)

{

String line = new String();

String host = new String();

String user = new String();

StringTokenizer data = new StringTokenizer(n.getText(),"@");

Integer port = new Integer(79); //port zarezerwowany dla uslufi FINGER

user = data.nextToken();

host = data.nextToken();

try{

Socket gniazdo = new Socket(host,port.intValue());

PrintStream wyslij = new PrintStream(gniazdo.getOutputStream());

wyslij.print(user+"\015\012"); //protokół FINGER wymaga znaków karetki i wysunięcia na końcu!

BufferedReader odbierz = new BufferedReader(new InputStreamReader(gniazdo.getInputStream()));

while ((line = odbierz.readLine())!=null) System.out.println(line);

gniazdo.close();

}

catch (IOException E) {JOptionPane.showMessageDialog(null,"Error in FILE connection"); }

}}}

Page 40: JAVA - Serializacja obiektów, interfejs  Serializable

40

JAVA – gniazda, serwery

public class Pn6 { public static int port = 1995;public static void main(String [] arg) { try { ServerSocket gniazdoS = new ServerSocket(port); System.out.println(" Serwer " + gniazdoS + "już pracuje..."); //informacje gniazda serwera i nr portu try { Socket gniazdo = gniazdoS.accept(); //blokowanie pracy aż do nadejścia połączenia try { System.out.println(" Połączenie nastąpiło z klientem " + gniazdo); //adres IP klienta i nr portu BufferedReader czytaj = new BufferedReader(new InputStreamReader(gniazdo.getInputStream())); PrintWriter pisz = new PrintWriter(new BufferedWriter(new OutputStreamWriter(gniazdo.getOutputStream())),true); // true jako 2 parametr określa automatyczne opróżnianie bufora po każdym println String line = new String(); while(true) { line = czytaj.readLine(); pisz.println(line); System.out.println(line); // odsyła ten sam tekst aż do wystąpienia "logout" if (line.equals("logout")) break; } } catch (IOException e) {System.err.println("wystapil blad klasy IO");} } catch (IOException e) {System.err.println("wystapil blad klasy IO");} finally { gniazdoS.close(); System.out.println("koniec pracy");} } catch (IOException e) {System.err.println("Nie można ustanowić serwera");}}}

Page 41: JAVA - Serializacja obiektów, interfejs  Serializable

41

JAVA – gniazda, klienci

public class Pn7 { public static int port = 1995;public static void main(String [] arg) {try { InetAddress adres = InetAddress.getByName(null); // uzyskujemy adres lokalny Socket gniazdo = new Socket(adres,port);

System.out.println(" Serwer " + gniazdo + "juz pracuje..."); try { System.out.println(" jest gniazdo " + gniazdo); BufferedReader czytaj = new BufferedReader(new InputStreamReader(gniazdo.getInputStream())); PrintWriter pisz = new PrintWriter(new BufferedWriter(new OutputStreamWriter(gniazdo.getOutputStream())),true); String line = new String(); BufferedReader wejscie = new BufferedReader(new InputStreamReader(System.in));

while(true) { line = wejscie.readLine(); // co przeczyta z klawiatury to wysyła do serwera pisz.println(line); line = czytaj.readLine(); System.out.println("server :" + line); //odpowiedzi serwera na konsole if (line.equals("logout")) break; } } catch (IOException e) {System.err.println("wystąpił błąd klasy IO");} finally { gniazdo.close(); System.out.println("koniec pracy");} } catch (IOException e) {System.err.println("Nie można ustanowić serwera");}}}