User Tools

Site Tools


swing:jframe

Η κλάση JFrame

H κλάση JFrame υλοποιεί το βασικό παράθυρο μιας εφαρμογής swing, όπως στο σχήμα. Το παράθυρο που ακολουθεί υλοποιείται από τον παρακάτω κώδικα:

FrameDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class FrameDemo {
 
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("FrameDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        JLabel emptyLabel = new JLabel("");
        emptyLabel.setPreferredSize(new Dimension(200, 130));
        frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
 
        // set window size
        frame.pack();
        // show window
        frame.setVisible(true);
    }
 
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

Παρατηρήσεις πάνω στον κώδικα

  1. Η εκτέλεση του κώδικα που αφορά το παραθυρικό περιβάλλον swing γίνεται μέσα από την κλήση της στατικής μεθόδου SwingUtilities.invokeLaber, η οποία εκτελεί τον παραθυρικό κώδικα σε ένα νέο νήμα το event dispatch thread (νήμα αποστολής συμβάντων). Αν και αυτό δεν είναι απαραίτητο για να τρέξει το πρόγραμμα σας, αποτελεί καλή πρακτική, η οποία διαχωρίζει το συγκεκριμένο νήμα από άλλα νήματα που πιθανόν τρέχουν στην εφαρμογή σας.
  2. H κλάση JFrame παράγει ένα αντικείμενο που αντιστοιχεί στο παράθυρο. Η παράμετρος τύπου String στον κατασκευαστή αντιστοιχεί στον τίτλο που θα φέρει το παράθυρο.
  3. Η μέθοδος JFrame.setDefaultCloseOperation(int operation) ορίζει τι θα γίνει όταν ο χρήστης πατήσει το κουμπί (επάνω δεξιά) που κλείνει το παράθυρο. Η μεταβλητή operation μπορεί να πάρει μία από τις παρακάτω τιμές:
    • JFrame.DO_NOTHING_ON_CLOSE: Δεν κάνει τίποτα. Αν υπάρχουν ορισμένοι window listeners αυτοί εκτελούνται.
    • JFrame.HIDE_ON_CLOSE: Κρύβει το παράθυρο αφού εκτελέσει πιθανώς ορισμένους window listeners. Το παράθυρο δεν είναι δυνατόν να ανακτηθεί, αλλά η εφαρμογή δεν τερματίζεται. Η παραπάνω τιμή είναι η default αν δεν έχει οριστεί κάποια άλλη.
    • JFrame.DISPOSE_ON_CLOSE: Τερματίζει το τρέχον παράθυρο. Αν υπάρχουν και άλλα παράθυρα αυτά παραμένουν, ενώ αν δεν υπάρχουν τερματίζει η εφαρμογή.
    • JFrame.EXIT_ON_CLOSE: Τερματίζει το τρέχον παράθυρο και συνολικά την εφαρμογή (αν υπάρχουν και άλλα παράθυρα τερματίζουν και αυτά).
  4. Η μέθοδος JFrame.pack υπολογίζει το μέγεθος του παραθύρου.
  5. Η μέθοδος JFrame.setVisible(boolean value) κάνει το παράθυρο ορατό προς τον τελικό χρήστη.

Η μέθοδος w.setVisible(true), ορίζει ότι το παράθυρο θα είναι ορατό. Αν ορίσετε w.setVisible(false), τότε το παράθυρο δεν εμφανίζεται και το πρόγραμμα τερματίζεται μόλις αρχίσει η εκτέλεση του.

Δομικά στοιχεία ενός JFrame

Από τι αποτελείται όμως ένα αντικείμενο της κλάσης JFrame; Στην πραγματικότητα ένα JFrame είναι ένα αντικείμενο που χρησιμοποιεί τα hooks του λειτουργικού συστήματος και του window manager για να δημιουργήσει ένα παράθυρο. Ένα JFrame περιέχει ένα αντικείμενο της κλάσης JRootPane, το οποίο με τη σειρά του περιέχει οτιδήποτε συνδέεται με το περιεχόμενο του παραθύρου. Πιο συγκεκριμένα ένα JRootPane περιέχει με τη σειρά του τα εξής:

  1. ένα αντικείμενο της κλάσης JLayeredPane το οποίο έχει την δυνατότητα να προσδίδει βάθος στα αντικείμενα που περιέχονται στο παράθυρο. Δεν θα ασχοληθούμε περαιτέρω με τη συγκεκριμένη κλάση, καθώς έχει ειδικές εφαρμογές. Μπορείτε να δείτε το σχετικό παράδειγμα από το site της Oracle.
  2. ένα content pane, δηλαδή ο χώρος στον οποίο θα τοποθετηθεί το περιεχόμενο του παραθύρου. Συνήθως τοποθετείται σε αυτό ένα αντικείμενο της κλάσης JPanel.
  3. ένα menu που τοποθετείται ακριβώς πάνω από το content pane.
  4. ένα component που ονομάζεται Glass Pane και τοποθετείται πάνω από το JLayeredPane, προκειμένου να πιάσει με τη βοήθεια του ποντικιού events πάνω από άλλα αντικείμενα. Και αυτό δεν θα μας απασχολήσει στη συνέχεια, καθώς έχει ειδικές εφαρμογές.

Το παρακάτω σχήμα από το site της Oracle δίνει εποπτικά την παραπάνω διάκριση των περιεχομένων του JRootPane. Δεν θα ασχοληθούμε περαιτέρω με την κλάση JRootPane, αλλά θα επικεντρωθούμε στο content pane και το menu bar που αυτό περιέχει (στοιχεία 2 και 3 από την παραπάνω λίστα).

Βασικές μέθοδοι της κλάσης JFrame

Η κλάση JFrame έχει τους εξής κατασκευαστές:

  • public JFrame(): default κατασκευαστής του παραθύρου.
  • public JFrame(String title): Κατασκευαστής του παραθύρου στον οποίο ορίζεται και ο τίτλος.

και τις παρακάτω μεθόδους

α) σχετικά με το μέγεθος του παραθύρου:

  • public 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 setContentPane(Container): Θέτει το content pane του παραθύρου.
  • Container getContentPane(): Λαμβάνει το content pane του παραθύρου.
  • public void add(Component componentToAdd): Προσθέτει ένα γραφικό component στο content pane του παραθύρου.
  • public void setLayout(LayoutManager manager): Ορίζει το layout για το παράθυρο. Θα δούμε πιο κάτω τι είναι το layout και θα δούμε επίσης τα πιο ενδιαφέροντα layouts.
  • public void setMenuBar(JMenuBar menubar): Ορίζει το αντικείμενο της μπάρας για το μενού στο παράθυρο.
  • public void setDefaultCloseOPeration(int operation): Αναφέρθηκε προηγούμενα.
swing/jframe.txt · Last modified: 2021/04/13 05:33 (external edit)