swing:intro

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Δημιουργία παραθυρικών εφαρμογών με Swing ====== Σε αυτή την ενότητα θα δούμε πως μπορούμε να κατασκευάσουμε παραθυρικές εφαρμογές (Graphical User Interfaces, GUIs) με χρήση της βιβλιοθήκης Swing. Οι παραθυρικές εφαρμογές είναι διαφορετικές από τις εφαρμογές που έχουμε συναντήσει μέχρι τώρα, με την έννοια ότι δεν υπάρχει μία συνεχής ροή προγράμματος, αλλά το πρόγραμμα εκτελείται μετά την δημιουργία ενός ερεθίσματος (event). Το ερέθισμα αυτό κατά κανόνα δημιουργείται από τον χρήστη που χρησιμοποιεί το πρόγραμμα. Το πρόγραμμα εκτελείται και στη συνέχεια σταματά και πάλι μέχρι να δοθεί το επόμενο ερέθισμα (event). Επειδή, το πρόγραμμα υπακούει σε ερεθίσμα, το μοντέλο αυτό είναι γνωστό ως //event driven programming// (προγραμματισμός με βάση events). ===== Events και Listeners ===== Τα παραθυρικά προγράμματα Swing χρησιμοποιούν events και //event handlers//. Ένα event είναι ένα αντικείμενο που λειτουργεί ως ερέθισμα σε ένα άλλο αντικείμενο που καλείται //listener//. Το αντικείμενο που δημιουργεί το event είναι συνήθως κάποιο τμήμα του γραφικού περιβάλλοντος (π.χ. ένα κουμπί ή μία επιλογή στο μενού) το οποίο θα το αποκαλούμε //component// ή //graphical component//, ως αποτέλεσμα του γεγονότος ότι επιλέχθηκε (έγινε click). Το αντικείμενο που αποκαλέσαμε νωρίτερα //listener// εκτελεί κάποιον κώδικα ως απάντηση στο ερέθισμα που δέχθηκε. Για παράδειγμα, θα μπορούσε να εκτυπώσει ένα μήνυμα στην οθόνη ή ένα μήνυμα στην κονσόλα. Ένα γραφικό component μπορεί να συνδέεται με μία σειρά από listeners, όπου κάθε ένας από τους listeners αυτούς να ανταποκρίνεται σε διαφορετικό ερέθισμα (event). <code> ----------------- /------\ --------------- | Graphical | / \ | | | Component | ----> [ Event ] ----> | Listener | | | \ / | | ----------------- \------/ --------------- </code> Το παραπάνω σχήμα απεικονίζει γραφικά την σχέση μεταξύ ενός //component// και ενός //listener//. Ένας listener μπορεί να έχει περισσότερες από μία μεθόδους που συνδέονται με λειτουργίες που θα εκτελεστούν κατά την λήψη ενός event. Οι μέθοδοι αυτές λέγονται //event handlers//. Κάθε πρόγραμμα καλείται να ορίσει ή να επαναορίσει (εάν είναι ήδη ορισμένοι) τους δικούς του event handlers για τα διαφορά events που μπορεί να συμβούν σε αυτό. <WRAP tip 80% center round> Βασική διαφορά του event driven προγραμματισμού είναι ότι δημιουργούμε αντικείμενα και μεθόδους (event listeners) τα οποία δεν γνωρίζουμε αν θα κληθούν και με ποια σειρά θα κληθούν, καθώς αυτό εξαρτάται από τον χρήστη που χρησιμοποιεί το πρόγραμμα. Ο προγραμματιστής κατά κανόνα δεν έχει έλεγχο στην σειρά εκτέλεσης των προγραμμάτων αυτών. </WRAP> ===== Το πρώτο μου πρόγραμμα ===== Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή. Κατεβάστε και τρέξτε τα επόμενα δύο αρχεία. <code java FirstWindow.java> import javax.swing.JFrame; import javax.swing.JButton; public class FirstSwingDemo { public static final int WIDTH = 300; public static final int HEIGHT = 200; public static void main(String[] args) { JFrame firstWindow = new JFrame(); firstWindow.setSize(WIDTH, HEIGHT); firstWindow.setTitle("First Window Program!"); firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); JButton endButton = new JButton("Click to end program."); EndingListener buttonEar = new EndingListener(); endButton.addActionListener(buttonEar); firstWindow.add(endButton); firstWindow.setVisible(true); } } </code> <code java EndingListener.java> import java.awt.event.*; public class EndingListener implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(0); } } </code> Για να μην έχουμε πολλαπλά αρχεία, μία παραλλαγή των παραπάνω είναι να τοποθετήσουμε την κλάση EndingListener σε μία ανώνυμη κλάση, ως εξής: <code java FirstSwingDemo2.java> import javax.swing.JFrame; import javax.swing.JButton; import java.awt.event.*; public class FirstSwingDemo2 { public static final int WIDTH = 300; public static final int HEIGHT = 200; public static void main(String[] args) { JFrame firstWindow = new JFrame(); firstWindow.setSize(WIDTH, HEIGHT); firstWindow.setTitle("First Window Program!"); firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); JButton endButton = new JButton("Click to end program."); ActionListener buttonEar = new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }; endButton.addActionListener(buttonEar); firstWindow.add(endButton); firstWindow.setVisible(true); } } </code>

swing/intro.1430449302.txt.gz · Last modified: 2016/02/26 11:15 (external edit)