User Tools

Site Tools


swing:jframe

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
swing:jframe [2018/03/21 16:06]
gthanos [Η κλάση JFrame]
swing:jframe [2018/03/27 20:34]
gthanos [Βασικές μέθοδοι της κλάσης JFrame]
Line 1: Line 1:
 ====== Η κλάση JFrame ====== ====== Η κλάση JFrame ======
  
-H κλάση JFrame υλοποιεί το βασικό παράθυρο μιας εφαρμογής swing, όπως στο σχήμα. Το παράθυρο που ακολουθεί υλοποιείται από τον παρακάτω κώδικα:+H κλάση [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html|JFrame]] υλοποιεί το βασικό παράθυρο μιας εφαρμογής swing, όπως στο σχήμα. Το παράθυρο που ακολουθεί υλοποιείται από τον παρακάτω κώδικα:
  
 <code java FrameDemo.java> <code java FrameDemo.java>
Line 39: Line 39:
 === Παρατηρήσεις πάνω στον κώδικα === === Παρατηρήσεις πάνω στον κώδικα ===
  
-  - Η εκτέλεση του κώδικα που αφορά το παραθυρικό περιβάλλον //swing// γίνεται μέσα από την κλήση της στατικής μεθόδου [[https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingUtilities.html#invokeLater-java.lang.Runnable-|SwingUtilities.invokeLaber]], η οποία εκτελεί τον παραθυρικό κώδικα σε ένα νέο νήμα το **event dispatch thread** (νήμα αποστολής συμβάντων).+  - Η εκτέλεση του κώδικα που αφορά το παραθυρικό περιβάλλον //swing// γίνεται μέσα από την κλήση της στατικής μεθόδου [[https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingUtilities.html#invokeLater-java.lang.Runnable-|SwingUtilities.invokeLaber]], η οποία εκτελεί τον παραθυρικό κώδικα σε ένα νέο νήμα το **event dispatch thread** (νήμα αποστολής συμβάντων). Αν και αυτό δεν είναι απαραίτητο για να τρέξει το πρόγραμμα σας, [[https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html|αποτελεί καλή πρακτική]], η οποία διαχωρίζει το συγκεκριμένο νήμα από άλλα νήματα που πιθανόν τρέχουν στην εφαρμογή σας.
   - H κλάση JFrame παράγει ένα αντικείμενο που αντιστοιχεί στο παράθυρο. Η παράμετρος τύπου String στον κατασκευαστή αντιστοιχεί στον τίτλο που θα φέρει το παράθυρο.    - H κλάση JFrame παράγει ένα αντικείμενο που αντιστοιχεί στο παράθυρο. Η παράμετρος τύπου String στον κατασκευαστή αντιστοιχεί στον τίτλο που θα φέρει το παράθυρο. 
-  - Η μέθοδος [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation-int-|JFrame.setDefaultCloseOPeration(int operation)]] ορίζει τι θα γίνει όταν ο χρήστης πατήσει το κουμπί (επάνω δεξιά) που κλείνει το παράθυρο. Η μεταβλητή ''operation'' μπορεί να πάρει μία από τις παρακάτω τιμές:+  - Η μέθοδος [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation-int-|JFrame.setDefaultCloseOperation(int operation)]] ορίζει τι θα γίνει όταν ο χρήστης πατήσει το κουμπί (επάνω δεξιά) που κλείνει το παράθυρο. Η μεταβλητή ''operation'' μπορεί να πάρει μία από τις παρακάτω τιμές:
     * JFrame.**DO_NOTHING_ON_CLOSE**: Δεν κάνει τίποτα. Αν υπάρχουν ορισμένοι window listeners αυτοί εκτελούνται.     * JFrame.**DO_NOTHING_ON_CLOSE**: Δεν κάνει τίποτα. Αν υπάρχουν ορισμένοι window listeners αυτοί εκτελούνται.
     * JFrame.**HIDE_ON_CLOSE**: Κρύβει το παράθυρο αφού εκτελέσει πιθανώς ορισμένους window listeners. Το παράθυρο δεν είναι δυνατόν να ανακτηθεί, αλλά η εφαρμογή δεν τερματίζεται. Η παραπάνω τιμή είναι η **default** αν δεν έχει οριστεί κάποια άλλη.     * JFrame.**HIDE_ON_CLOSE**: Κρύβει το παράθυρο αφού εκτελέσει πιθανώς ορισμένους window listeners. Το παράθυρο δεν είναι δυνατόν να ανακτηθεί, αλλά η εφαρμογή δεν τερματίζεται. Η παραπάνω τιμή είναι η **default** αν δεν έχει οριστεί κάποια άλλη.
Line 55: Line 55:
 ===== Δομικά στοιχεία ενός JFrame ===== ===== Δομικά στοιχεία ενός JFrame =====
  
-Από τι αποτελείται όμως ένα αντικείμενο της κλάσης JFrame; Στην πραγματικότητα ένα JFrame είναι ένα αντικείμενο που χρησιμοποιεί τα hooks του λειτουργικού συστήματος και του window manager για να δημιουργήσει ένα παράθυρο. Ένα JFrame περιέχει ένα αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html|JRootPane]], το οποίο με τη σειρά του περιέχει οτιδήποτε συνδέεται με το περιεχόμενο του παραθύρου. Πιο συγκεκριμένα ένα [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html|JRootPane]] περιέχει με τη σειρά του:+Από τι αποτελείται όμως ένα αντικείμενο της κλάσης [[https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html|JFrame]]; Στην πραγματικότητα ένα **JFrame** είναι ένα αντικείμενο που χρησιμοποιεί τα hooks του λειτουργικού συστήματος και του window manager για να δημιουργήσει ένα παράθυρο. Ένα **JFrame** περιέχει ένα αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html|JRootPane]], το οποίο με τη σειρά του περιέχει οτιδήποτε συνδέεται με το περιεχόμενο του παραθύρου. Πιο συγκεκριμένα ένα [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html|JRootPane]] περιέχει με τη σειρά του τα εξής:
   - ένα αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JLayeredPane.html|JLayeredPane]] το οποίο έχει την δυνατότητα να προσδίδει βάθος στα αντικείμενα που περιέχονται στο παράθυρο. Δεν θα ασχοληθούμε περαιτέρω με τη συγκεκριμένη κλάση, καθώς έχει ειδικές εφαρμογές. Μπορείτε να δείτε το σχετικό [[https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html|παράδειγμα από το site της Oracle]].   - ένα αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JLayeredPane.html|JLayeredPane]] το οποίο έχει την δυνατότητα να προσδίδει βάθος στα αντικείμενα που περιέχονται στο παράθυρο. Δεν θα ασχοληθούμε περαιτέρω με τη συγκεκριμένη κλάση, καθώς έχει ειδικές εφαρμογές. Μπορείτε να δείτε το σχετικό [[https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html|παράδειγμα από το site της Oracle]].
   - ένα //content pane// (συνήθως είναι αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JPanel.html|JPanel]])   - ένα //content pane// (συνήθως είναι αντικείμενο της κλάσης [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JPanel.html|JPanel]])
   - ένα [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JMenuBar.html|menu]] που τοποθετείται ακριβώς πάνω από το //content pane//.   - ένα [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JMenuBar.html|menu]] που τοποθετείται ακριβώς πάνω από το //content pane//.
-  - ένα //component// που ονομάζεται Glass Pane και τοποθετείται πάνω από το JLayeredPane.+  - ένα //component// που ονομάζεται Glass Pane και τοποθετείται πάνω από το [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JLayeredPane.html|JLayeredPane]], προκειμένου να πιάσει με τη βοήθεια του ποντικιού events πάνω από άλλα αντικείμενα. Και αυτό δεν θα μας απασχολήσει στη συνέχεια, καθώς έχει ειδικές εφαρμογές.
  
-Το παρακάτω σχήμα από το [[https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html#rootpane|site της Oracle]] δίνει εποπτικά την παραπάνω διάκριση των περιεχομένων του [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html|JRootPane]].+Το παρακάτω σχήμα από το [[https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html#rootpane|site της Oracle]] δίνει εποπτικά την παραπάνω διάκριση των περιεχομένων του [[https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html|JRootPane]]. Δεν θα ασχοληθούμε περαιτέρω με την κλάση **JRootPane**, αλλά θα επικεντρωθούμε στο //content pane// και το //menu bar// που αυτό περιέχει (στοιχεία 2 και 3 από την παραπάνω λίστα).
  
 {{  :swing:ui-rootpane.gif  |}} {{  :swing:ui-rootpane.gif  |}}
  
 ===== Βασικές μέθοδοι της κλάσης JFrame ===== ===== Βασικές μέθοδοι της κλάσης JFrame =====
- 
  
 Η κλάση **JFrame** έχει τους εξής κατασκευαστές: Η κλάση **JFrame** έχει τους εξής κατασκευαστές:
     * **public JFrame()**: default κατασκευαστής του παραθύρου.     * **public JFrame()**: default κατασκευαστής του παραθύρου.
     * **public JFrame(String title)**: Κατασκευαστής του παραθύρου στον οποίο ορίζεται και ο τίτλος.     * **public JFrame(String title)**: Κατασκευαστής του παραθύρου στον οποίο ορίζεται και ο τίτλος.
- +και τις παρακάτω μεθόδους **α)** σχετικά με το μέγεθος του παραθύρου:
-Σχετικά με το μέγεθος του παραθύρου:+
   * **public void setSize(int width, int height)**: Ορισμός του μεγέθους του παραθύρου σε pixels.   * **public void setSize(int width, int height)**: Ορισμός του μεγέθους του παραθύρου σε pixels.
   * **void setSize(int width, int height):** Ορισμός του μεγέθους του παραθύρου σε pixels.   * **void setSize(int width, int height):** Ορισμός του μεγέθους του παραθύρου σε pixels.
   * **void setBound(int x, int y, int width, int height):** Ορίζει τη θέση του παραθύρου στην οθόνη και το μέγεθος του παραθύρου κατά τη δημιουργία του.   * **void setBound(int x, int y, int width, int height):** Ορίζει τη θέση του παραθύρου στην οθόνη και το μέγεθος του παραθύρου κατά τη δημιουργία του.
- +**β)** Σχετικά με το περιεχόμενο του παραθύρου:
-Σχετικά με το περιεχόμενο του παραθύρου:+
   * **void setContentPane(Container):** Θέτει το //content pane// του παραθύρου.   * **void setContentPane(Container):** Θέτει το //content pane// του παραθύρου.
   * **Container getContentPane():** Λαμβάνει το //content pane// του παραθύρου.   * **Container getContentPane():** Λαμβάνει το //content pane// του παραθύρου.
Line 85: Line 82:
   * **public void setDefaultCloseOPeration(int operation)**: Αναφέρθηκε προηγούμενα.   * **public void setDefaultCloseOPeration(int operation)**: Αναφέρθηκε προηγούμενα.
  
 +| Προηγούμενο: [[:swing:event | Events & Event Listeners ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:swing:color | Η κλάση JColor ]] |
  
swing/jframe.txt · Last modified: 2021/04/13 05:33 (external edit)