1 / 41

JAVA - Serializacja obiektów, interfejs Serializable

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

cheri
Download Presentation

JAVA - Serializacja obiektów, interfejs Serializable

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 a.showInBox();} } 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 Obiekt jest odtwarzany wyłącznie na podstawie zapisu, nie są wołane konstruktory

  2. JAVA - kontola serializacji, interfejs Externalizable 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(); } } 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 Wywoływany jest konstruktor domyślny !!!!!!!!!!! zapis i odczyt na podstawie writeExternal i readExternal

  3. JAVA - wyłączenie z serializacji poprzez transient 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 ;} } 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

  4. JAVA - serializacja i deserializacja sieci obiektów do pojedynczego strumienia 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());} } 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 Obiekt Group który zawierają s4 i s5 jest tworzony tylko raz

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

  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

  7. JAVA - serializacja i deserializacja sieci obiektów - do wielu strumieni (3) 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() );} } class Group implements Serializable { int nr; Group(int n ) { nr = n;} String gAddres() { return super.toString();} int inGroup() {return nr;} } W konsekwencji tworzonych jest dwa razy więcej obiektów

  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

  9. JAVA – Aplety, główne metody // 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); }} 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> */ /* umieszczenie appletu na stronie WWW <applet code = “A1.class” height = “ 100” width = “300”> Musisz mieć przeglądarkę z obsługa Javy </applet> */

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

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

  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>

  13. JAVA – Aplety, przekazywanie parametrów, JAR <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ą, <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); } }

  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

  15. JAVA – Aplety, biblioteka Swing-GUI Wersja A- ostatni składnik przesłania poprzednie /*<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 B – zastosowano szablon

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

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

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

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

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

  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

  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.

  23. JAVA – Aplety, obsługa zdarzeń 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 } 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); }

  24. JAVA – Aplety, obsługa zdarzeń 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(); } }} 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); }

  25. JAVA - Aplety 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(); } } 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); } }

  26. JAVA – Aplety, zdarzenia 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){} } } 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)); }

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

  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

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

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

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

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

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

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

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

  36. JAVA – Aplety i połączenia poprzez adresy URL 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();} } 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); }

  37. JAVA –adresy URL Aplety mogą komunikować się wyłącznie z hostem z którego zostały załadowane!! 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"); } }} }

  38. JAVA – gniazda Socket gniazdo = new Socket(nazwa hosta , nr portu ); gniazdo.getInputStream() gniazdo.getOutputStream() Gniazdo.close() 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("romero@ionstorm.con"); // plik .plan apl.b.addActionListener(apl); apl.ramka.setSize(500,500); apl.ramka.setVisible(true); apl.ramka.setDefaultCloseOperation(JFrame.EXIT_ON_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

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

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

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

More Related