swing:intro

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
swing:intro [2015/05/01 02:59]
gthanos [Events και Listeners]
swing:intro [2016/04/23 05:04] (current)
gthanos [Το παραπάνω παράθυτο ως αυτόνομη κλάση]
Line 23: Line 23:
 ===== Το πρώτο μου πρόγραμμα ===== ===== Το πρώτο μου πρόγραμμα =====
  
-Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή.+Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή. Κατεβάστε και τρέξτε τα επόμενα δύο αρχεία.
  
 <code java FirstWindow.java>​ <code java FirstWindow.java>​
Line 56: Line 56:
 } }
 </​code>​ </​code>​
 +
 +Ας εξετάσουμε όμως τι κάνει το πρόγραμμα μας. Αρχικά δημιουργούμε ένα αντικείμενο του τύπου //JFrame// μέσα από την κλήση.
 +<code java>
 +    JFrame firstWindow = new JFrame();
 +</​code>​
 +Το αντικείμενο αυτό είναι ένα απλό παράθυρο με τρία κουμπιά (minimize, resize, close). Στη συνέχεια ορίζουμε το μέγεθος του παραθύρου (σε pixels) και τον τίτλο του. ​
 +<code java>
 +    firstWindow.setSize(WIDTH,​ HEIGHT);
 +    firstWindow.setTitle("​First Window Program!"​);​
 +</​code>​
 +Από την εμπειρία σας γνωρίζετε ότι όταν πατήσετε το κουμπί για το κλείσιμο του παραθύρου τότε το παράθυρο κλείνει και η εφαρμογή τερματίζεται. Η παρακάτω γραμμή διαχειρίζεται διαφορετικά ένα click event στο κουμπί κλεισίματος του παραθύρου,​ όπου όταν πατήσετε το κουμπί κλεισίματος αντί το παράθυρο να κλείσει δεν κάνει τίποτα.
 +<code java>
 +firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);​
 +</​code>​
 +
 +Στην συνέχεια ορίζουμε ένα αντικείμενο τύπου JButton (κουμπί) με τίτλο "Click to end program."​ και δημιουργούμε και έναν Listener τον οποίο συνδέουμε με το συγκεκριμένο κουμπί. ​
 +<code java>
 +JButton endButton = new JButton("​Click to end program."​);​
 +EndingListener buttonEar = new EndingListener();​
 +endButton.addActionListener(buttonEar);​
 +</​code>​
 +
 +Προσθέτουμε το κουμπί στο παράθυρο και ορίζουμε ότι το παράθυρο που φτιάξαμε θέλουμε να είναι ορατό.
 +<code java>
 +firstWindow.add(endButton);​
 +firstWindow.setVisible(true);​
 +</​code>​
 +==== Χρήση μίας ανώνυμης κλάσης ActionListener ====
 +
 +Για να μην έχουμε πολλαπλά αρχεία,​ μία παραλλαγή των παραπάνω είναι να τοποθετήσουμε την κλάση 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>​
 +
 +==== Το παραπάνω παράθυρο ως αυτόνομη κλάση ====
 +
 +Αν θέλατε να δημιουργήσετε μία κλάση που να υλοποιεί το συγκεκριμένο παράθυρο,​ θα μπορούσατε να το κάνετε ως εξής:
 +
 +<code java FirstWindow.java>​
 +import javax.swing.JFrame;​
 +import javax.swing.JButton;​
 +import java.awt.event.*;​
 +
 +public class FirstWindow extends JFrame {
 +  public static final int WIDTH = 300;
 +  public static final int HEIGHT = 200;
 +  ​
 +  public FirstWindow() {
 +    super();
 +    setSize(WIDTH,​ HEIGHT);
 +    setTitle("​First Window Program!"​);​
 +    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);​
 +    add(endButton);​
 +  }
 +  ​
 +  public static void main(String[] args) {
 +    FirstWindow w = new FirstWindow();​
 +    w.setVisible(true);​
 +  }
 +}
 +</​code>​
 +
 +==== Βασικές μέθοδοι της κλάσης JFrame ====
 +
 +Οι βασικές μέθοδοι της κλάσης JFrame είναι οι παρακάτω:​
 +  * ''​public JFrame()'':​ default κατασκευαστής του παραθύρου.
 +  * ''​public JFrame(String title)'':​ Κατασκευαστής του παραθύρου στον οποίο ορίζεται και ο τίτλος.
 +  * ''​public void setTitle(String title)'':​ Ορισμός του τίτλου του παραθύρου.
 +  * ''​public void setSize(int width, int height)'':​ Ορισμός του μεγέθους του παραθύρου σε pixels.
 +  * ''​public void add(Component componentToAdd)'':​ Προσθέτει ένα γραφικό component στο παράθυρο.
 +  * ''​public void setLayout(LayoutManager manager)'':​ Ορίζει το layout για το παράθυρο. Θα δούμε πιο κάτω τι είναι το layout και θα δούμε επίσης τα πιο ενδιαφέροντα layouts.
 +  * ''​public void setMenuBar(JMenuBar menubar)'':​ Ορίζει την μπάρα για το μενού στο παράθυρο.
 +  * ''​public void 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**:​ Τερματίζει το τρέχον παράθυρο και συνολικά την εφαμοργή (αν υπάρχουν και άλλα παράθυρα τερματίζουν και αυτά).
 +
 +<WRAP tip 80% center round>
 +Η μέθοδος ''​w.setVisible(true)'',​ ορίζει ότι το παράθυρο θα είναι ορατό. Αν ορίσετε ''​w.setVisible(false)'',​ τότε το παράθυρο δεν εμφανίζεται και το πρόγραμμα τερματίζεται μόλις αρχίσει η εκτέλεση του.
 +</​WRAP>​
  
swing/intro.1430449180.txt.gz · Last modified: 2016/02/26 11:15 (external edit)