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 ;} }"> 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 ;} }">

Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Podobne prezentacje


Prezentacja na temat: ""— Zapis prezentacji:

101 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

102 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

103 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 ;} }

104 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

105 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 

106 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

107 W konsekwencji tworzonych jest dwa razy więcej obiektów
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

108 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

109 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> */

110 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 }}

111 JAVA – Aplety, testowanie
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);}} 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

112 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”> Jeżeli ładowanie ma odbywać się z innej witryny WWW: <applet code = ”A3.class” codebase = ” height = ”100” width =”300”> 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>

113 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ą,

114 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 ( - 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

115 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

116 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); }

117 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); }

118 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); }

119 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"); }}

120 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")); }}

121 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

122 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.

123 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

124 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(); }}

125 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(); }

126 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){}

127 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 (" ");

128 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

129 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()); }}

130 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"); } }} }

131 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); }

132 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 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"); } }}

133 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"); 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"); } }}

134 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);

135 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 { URLConnection polaczenie = adres.openConnection(); polaczenie.connect(); BufferedReader czytaj = new BufferedReader(new InputStreamReader(polaczenie.getInputStream())); 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 }}}

136 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); } Aplety mogą komunikować się wyłącznie z hostem z którego zostały załadowane!! public void init() { aplikacja = new Pn2(); run(); } class PException extends Exception { PException() { super();}

137 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() 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!!

138 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); // 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 Niektóre wyższe numery portów są wykorzystywane->

139 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 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"); } }}}

140 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 Socket gniazdo = gniazdoS.accept(); //blokowanie pracy aż do nadejścia połączenia 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");} }}

141 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..."); 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");} }}


Pobierz ppt ""

Podobne prezentacje


Reklamy Google