290 likes | 419 Views
Human Computer Interaction JAVA APPLETS JAVA AWT Μελισσόβας Δημήτρης Owda Zaher. Περιορισμοί ασφάλειας Τα applets δε μπορούν:. Να διαβάσουν από τον τοπικό δίσκο του client Μπορούν να παρουσιάσουν σελίδες διαθέσιμες στο Web Να γράψουν στον τοπικό δίσκο του client
E N D
Human Computer InteractionJAVA APPLETSJAVA AWTΜελισσόβας ΔημήτρηςOwda Zaher
Περιορισμοί ασφάλειαςΤα applets δε μπορούν: • Να διαβάσουν από τον τοπικό δίσκο του client • Μπορούν να παρουσιάσουν σελίδες διαθέσιμες στο Web • Να γράψουν στον τοπικό δίσκο του client • Ο browser μπορεί να αποφασίσει κάνει cache κάποια αρχεία σχετιζόμενα με τα applets. Δεν είναι στην δικαιοδοσία του applet να αποφασίσει ποια. • Να ανοίξουν άλλα connections, περα από από τον webserver • Περιορίζει τα applets να βλέπουν αρχεία πίσω από network firewalls
Δε μπορούν: • Να εκτελέσουν προγράμματα στο μηχάνημα του χρήστη • Η Java έχει τη δυνατότητα να εκτελέσει τοπικά εγκατεστημένα προγράμματα. • Αυτό δεν επιτρέπεται στα applets για λόγους ασφαλείας • Να ανακαλύψουν προσωπικά δεδομένα του χρήστη • Τα ευαίσθητα στοιχεία του χρήστη, όπως το username ή στοιχεία για το σύστημα (πχ filesystem ktlp) • Μπορούν ωστόσο να μάθουν το όνομα του host από το οποίο τρέχουν (αυτό το ξέρει ήδη ο HTTP server)
Applet Template Import java.applet.Applet; Import java.awt.*; Public class AppletTemplate extends Applet { // Variable declarations Public void init() { // Variable initialisations, image loading, etc. } Public void paint(Graphics g) { // Drawing operations } }
HTML Template <HTML> <HEAD> <TITLE> A Template for Loading Applets</TITLE> </HEAD> <BODY> <H1>Hello World!</H1> <P> <APPLET CODE=“ApplectTemplate.class” WIDTH=120 HEIGHT=60> <B>Error!</B> </APPLET> </BODY> </HTML>
Παράδειγμα: Applet Import java.applet.Applet; Import java.awt.*; Public class MyTest extends Applet { private Image My_Image; Public void init() { // constructor setBackground(Color.white); setFont(new Font(“Arial”, Font.BOLD, 14)); My_Image = getImage(getDoccumentBase(), “pictures/test.gif”); add(new Label(“Test!”)); } Public void paint(Graphics g) { //drawing g.drawImage(My_Image, 0, 50, this); } }
Κάλεσμα <HTML> <HEAD> <TITLE> My Test!</TITLE> </HEAD> <BODY> <H1>My Image</H1> <P> <APPLET CODE=“MyTest.class” WIDTH=120 HEIGHT=60> <B>Error!</B> </APPLET> </BODY> </HTML>
Ο κύκλος ζωής ενός Applet… • Public void init() • Καλείται μονάχα την πρώτη φορά που φορτώνεται το applet στον browser • Όχι κάθε φορά που εκτελείται αυτό • Public void start() • Καλείται αρχικά αμέσως μετά την init() • Ξανακαλείται κάθε φορά που ο χρήστης επιστρέφει στην σελίδα • Χρησιμοποιείται για να εκκινεί animations • Public void paint(Graphics g) • Καλείται αμέσως μετά από την start() • Ξανακαλείται όταν ο browser ξανασχεδιάζει την εικόνα. Συνήθως όταν καλύπτεται ένα μικρό μέρος και επανεμφανίζεται
Ο κύκλος ζωής ενός Applet… (Συνέχεια) • Public void stop() • Κάθε φορά που ο user φεύγει από την σελίδα • Χρήσιμο για να σταματάει τα animations • Public void destroy() • Όταν κλείνει το applet
Χρήσιμες συναρτήσεις • getCodeBase, getDocumentBase • Επιστρέφουν τα URL του • Applet file – getCodeBase() • HTML file – getDocumentBase() • getSize • Επιστρέφει τις διαστάσεις του applet (width, length) • getGraphics • Επιστρέφει το Graphicsobject για το applet • Το Graphics διαγράφεται μεταξύ διαδοχικών paint()
Χρήσιμες συναρτήσεις (Συνέχεια) • showDocument (ApplectContext method) getAppletContext().showDocument(…) • Ζητάει από τον browser να παρουσιάσει μία Web page • Μπορεί να είναι και FRAME • showStatus • Εμφανίζει ένα string στο status line του browser • getCursor, setCursor • Ορίζει τον τύπο του κέρσορα για το ποντίκι. Πχ: CROSSHAIR_CURSOR, HAND_CURSOR, WAIT_CURSOR
Χρήσιμες συναρτήσεις (Συνέχεια) ! • getAudioClip, play • Παίζει ένα αρχείο ήχου, από μια απομακρυσμένη τοποθεσία • getBackground, setBackground • Ρυθμίζει το χρώμα του background για το applet • getForeground, setForeground • Ρυθμίζει το τρέχον χρώμα της σχεδίασης
Embedding σε HTML <APPLET CODE=“…” WIDTH=xxx HEIGHT=xxx …> … </APPLET> • Απαραίτητα δεδομένα • CODE • Ρυθμίζει το filename του αρχείου Java class, ώστε αυτό να φορτωθεί • Σχετικό path, με βάση το τρέχον HTML file, εκτός άμα οριστεί η παράμετρος CODEBASE κατάλληλα • WIDTH και HEIGHT • Ορίζει τις διαστάσεις του applet • Οι τιμές μπορεί να οριστούν τόσο σε pixels όσο και σε ποσοστό του browser window
Embedding σε HTML (Συνέχεια) • Άλλοι παράμετροι • ALIGN HSPACE και VSPACE • Ελέγχει την τοποθέτηση και τα borders. Παρόμοιο με το IMG της HTML • ARCHIVE • Ορίζει JAR file (zip file με .jar extention) το οποίο περιέχει όλες τις κλάσεις και εικόνες που χρησιμοποιούνται από τα applets • Η συμπίεση εξοικονομεί πάρα πολύ χρόνο, ειδικότερα σε περίπτωση αρκετών αρχείων • ΝΑΜΕ • Δίνει όνομα στο applet
Καθορισμός παραμέτρων <H1> Customizable ‘ello World applet</H1> <APPLET CODE=“Hello.class” WIDTH=400 HEIGHT=40> <PARAM NAME=“BACKGROUND” VALUE=“LIGHT”> <B> Error! </B> </APPLET> <APPLET CODE=“Hello.class” WIDTH=400 HEIGHT=40> <PARAM NAME=“BACKGROUND” VALUE=“DARK”> <B> Error! </B> </APPLET> <APPLET CODE=“Hello.class” WIDTH=400 HEIGHT=40> <B> Error! </B> </APPLET>
Διάβασμα παραμέτρων • Χρήση της getParameter(name) • name: case sensitive Public void init() { Color backgrround = Color.gray; Color foreground = Color.darkGray; String backgroundType = getParameter(“BACKGROUND”); If (backgroundType != null) { If (backgroundType.equalsIgnoreCase(“LIGHT”)) { Background = Color.white; Foreground = Color.black; } else if (backgroundType.equalsIgnoreCase(“DARK”)) { background = Color.black; foreground = Color.white; } } … }
Μέθοδοι Graphics • drawString(string, left, bottom) • Ζωγραφίζει το string, στην τοποθεσία left, bottom • drawRect(left, top, width, height) • ‘Άδειο’ ορθογώνιο • fillRect(left, top, width, height) • ‘Γεμάτο’ ορθογώνιο • drawLine(x1, y1, y2, y2) • Γραμμή
Μέθοδοι Graphics • drawOval, fillOval • Σχεδιάζει ένα οβάλ σχήμα. Τα arguments καθορίζουν τα ορθογώνια borders • drawPolygon, fillPolygon • Τα points αποθηκεύονται σε array ή στην Polygon class. • By default κλειστή πολυγωνική γραμμή. Εναλακτικά drawPolyline • drawImage • Φορτώνει μία εικόνα • Υποστηρίζει JPG ή GIF format
Drawing Color • setColor, getColor • Καθορίζει το foreground color (χρώμα σχεδίασης) • Default: το foreground color του παραθύρου • Υπάρχουν προκαθορισμένα χρώματα (Color.red, Color.yellow κτλπ), ή new Color(r, g, b)
Graphics Font • setFont, getFont • Καθορισμός του font για strings
Άλλα modes • setXORMode • Χρήσιμο για selections • setPaintMode • Επιστροφή στο κανονικό mode
Παράθυρα • Containers • Τα περισσότερα παράθυρα θεωρούνται Containers. Μπορούν να κρατάνε αλλα παράυθρα ή GUI components. Δεν ισχύει για Canvas • Layout Managers • Για να ρυθμίζουν μεγέθη και θέσεις components πάνω στα παράθυρα • Events • Για input (mouse, keyboard etc)
Παράθυρα (Συνέχεια) • Σχεδιασμός • Subclass με δικιά της paint method • Popup Windows • (Frame και Dialog) έχουν δικιά τους μπάρα • (Canvas και Panel) πρέπει να γίνουν embed
Components • Χρήσιμες συναρτήσεις • getBackground/setBackground .. • Paint • setVisible (true, false) • List • getParent • …
Παράδειγμα Import java.applets.Applet; Import java.awt.* Public class ButtonTest extends Applet { public void init() { String[] labelPrefixes = { “Start”, “Stop”, “Pause”, “Resume” }; For (int = 0; I < 4; i++) { add(new Button(labelPrefixes[i] + “ Thread 1)); } } }
Παράδειγμα 2 (Confirmation Dialog) Class Confirm extends Dialog implements ActionListener { Private Button yes, no; Public Confirm(Frame parent) { super(parent, “Confirmation”, true); setLayout(new FlowLayout()); add(new Label(“Really quit?”)); yes = new Button(“Yes”); yes.addActionListener(this); no = new Button(“No”); no.addActionListener(this); add(yes); add(no); pack(); setVisible(true); }
Συνέχεια Public void actionPerformed(ActionEvent event) { if (event.getSource() == yes) { System.exit(0); } else { dispose(); } } }
Χρησιμοποίηση του Dialog Public class ConfirmTest extends Frame { public static void main(String[] args) { new ConfirmTest(); } public ConfirmTest() { super(“Confirming QUIT”); setSize(200, 200); addWindowListener(new ConfirmListener()); setVisible(true); } public ConfirmTest(String title) { super(title); } private class ConfirmListener extends WindowAdapter { public void windowClosing(WindowEvent event) { new Confirm(ConfirmText.this); } } }