User Tools

Site Tools


swing:first_program

Differences

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

Link to this comparison view

Next revision
Previous revision
swing:first_program [2018/03/20 17:48] – created gthanosswing:first_program [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 3: Line 3:
 Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή. Κατεβάστε και τρέξτε τα επόμενα δύο αρχεία. Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή. Κατεβάστε και τρέξτε τα επόμενα δύο αρχεία.
  
-<code java FirstWindow.java>+<code java FirstSwingDemo.java>
 import javax.swing.JFrame; import javax.swing.JFrame;
 import javax.swing.JButton; import javax.swing.JButton;
 +import java.awt.event.*;
  
-public class FirstWindow {+public class FirstSwingDemo {
   public static final int WIDTH = 300;   public static final int WIDTH = 300;
   public static final int HEIGHT = 200;   public static final int HEIGHT = 200;
Line 17: Line 18:
     firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);     firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
     JButton endButton = new JButton("Click to end program.");     JButton endButton = new JButton("Click to end program.");
-    EndingListener buttonEar = new EndingListener();+     
 +    ActionListener buttonEar = new ActionListener() 
 +      public void actionPerformed(ActionEvent e) { 
 +        System.exit(0); 
 +      } 
 +    }; 
 +    
     endButton.addActionListener(buttonEar);     endButton.addActionListener(buttonEar);
     firstWindow.add(endButton);     firstWindow.add(endButton);
 +    firstWindow.pack();
     firstWindow.setVisible(true);     firstWindow.setVisible(true);
   }   }
Line 29: Line 37:
       }        } 
     });     });
-  } 
-} 
-</code> 
- 
-<code java EndingListener.java> 
-import java.awt.event.*; 
- 
-public class EndingListener implements ActionListener { 
-  public void actionPerformed(ActionEvent e) { 
-    System.exit(0); 
   }   }
 } }
Line 54: Line 52:
 Από την εμπειρία σας γνωρίζετε ότι όταν πατήσετε το κουμπί για το κλείσιμο του παραθύρου τότε το παράθυρο κλείνει και η εφαρμογή τερματίζεται. Η παρακάτω γραμμή διαχειρίζεται διαφορετικά ένα click event στο κουμπί κλεισίματος του παραθύρου, όπου όταν πατήσετε το κουμπί κλεισίματος αντί το παράθυρο να κλείσει δεν κάνει τίποτα. Από την εμπειρία σας γνωρίζετε ότι όταν πατήσετε το κουμπί για το κλείσιμο του παραθύρου τότε το παράθυρο κλείνει και η εφαρμογή τερματίζεται. Η παρακάτω γραμμή διαχειρίζεται διαφορετικά ένα click event στο κουμπί κλεισίματος του παραθύρου, όπου όταν πατήσετε το κουμπί κλεισίματος αντί το παράθυρο να κλείσει δεν κάνει τίποτα.
 <code java> <code java>
-firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);+    firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 </code> </code>
  
 Στην συνέχεια ορίζουμε ένα αντικείμενο τύπου JButton (κουμπί) με τίτλο "Click to end program." και δημιουργούμε και έναν Listener τον οποίο συνδέουμε με το συγκεκριμένο κουμπί.  Στην συνέχεια ορίζουμε ένα αντικείμενο τύπου JButton (κουμπί) με τίτλο "Click to end program." και δημιουργούμε και έναν Listener τον οποίο συνδέουμε με το συγκεκριμένο κουμπί. 
 <code java> <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 ===== 
- 
-Για να μην έχουμε πολλαπλά αρχεία, μία παραλλαγή των παραπάνω είναι να τοποθετήσουμε την κλάση 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 showGUI() { 
-    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.");     JButton endButton = new JButton("Click to end program.");
-     
     ActionListener buttonEar = new ActionListener() {     ActionListener buttonEar = new ActionListener() {
       public void actionPerformed(ActionEvent e) {       public void actionPerformed(ActionEvent e) {
         System.exit(0);         System.exit(0);
       }       }
-    }; +    };    
-    +
     endButton.addActionListener(buttonEar);     endButton.addActionListener(buttonEar);
 +</code>
 +
 +Προσθέτουμε το κουμπί στο παράθυρο και ορίζουμε ότι το παράθυρο που φτιάξαμε θέλουμε να είναι ορατό.
 +<code java>
     firstWindow.add(endButton);     firstWindow.add(endButton);
 +    firstWindow.pack();
     firstWindow.setVisible(true);     firstWindow.setVisible(true);
-  } 
-   
-  public static void main(String[] args) { 
-    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
-      public void run() { 
-        showGUI(); 
-      }  
-    }); 
-  } 
-} 
 </code> </code>
  
-===== Παραλλαγή - Το παραπάνω παράθυρο ως αυτόνομη κλάση ===== +Το πρόγραμμα εκκινεί μέσω της στατικής μεθόδου **main** όπως παρακάτω. Ο παρακάτω κώδικας θα εξηγηθεί σε επόμενη ενότητα. 
- +<code java>
-Αν θέλατε να δημιουργήσετε μία κλάση που να υλοποιεί το συγκεκριμένο παράθυρο, θα μπορούσατε να το κάνετε ως εξής: +
- +
-<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 static void showGUI() { +
-    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); +
-  } +
-  +
   public static void main(String[] args) {   public static void main(String[] args) {
     javax.swing.SwingUtilities.invokeLater(new Runnable() {     javax.swing.SwingUtilities.invokeLater(new Runnable() {
Line 147: Line 82:
     });     });
   }   }
-} 
 </code> </code>
  
-===== Βασικές μέθοδοι της κλάσης JFrame ===== +| Προηγούμενο: [[:swing:intro| Δημιουργία γραφικού περιβάλλοντος με swing ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:swing:events | Events & Event Listeners ]] |
- +
-Οι βασικές μέθοδοι της κλάσης 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/first_program.1521568097.txt.gz · Last modified: 2018/03/20 17:48 (external edit)