This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
swing:intro [2015/05/01 03:01] gthanos [Το πρώτο μου πρόγραμμα] |
swing:intro [2016/04/23 05:04] (current) gthanos [Το παραπάνω παράθυτο ως αυτόνομη κλάση] |
||
|---|---|---|---|
| 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 σε μία ανώνυμη κλάση, ως εξής: | Για να μην έχουμε πολλαπλά αρχεία, μία παραλλαγή των παραπάνω είναι να τοποθετήσουμε την κλάση EndingListener σε μία ανώνυμη κλάση, ως εξής: | ||
| Line 74: | Line 102: | ||
| 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."); | ||
| + | | ||
| ActionListener buttonEar = new ActionListener() { | ActionListener buttonEar = new ActionListener() { | ||
| public void actionPerformed(ActionEvent e) { | public void actionPerformed(ActionEvent e) { | ||
| Line 79: | Line 108: | ||
| } | } | ||
| }; | }; | ||
| + | | ||
| endButton.addActionListener(buttonEar); | endButton.addActionListener(buttonEar); | ||
| firstWindow.add(endButton); | firstWindow.add(endButton); | ||
| Line 86: | Line 116: | ||
| </code> | </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> | ||