This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
swing:intro [2017/04/04 15:51] gthanos [Το παραπάνω παράθυρο ως αυτόνομη κλάση] |
swing:intro [2018/03/27 20:24] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Δημιουργία παραθυρικών εφαρμογών με Swing ====== | ====== Δημιουργία παραθυρικών εφαρμογών με Swing ====== | ||
| - | Σε αυτή την ενότητα θα δούμε πως μπορούμε να κατασκευάσουμε παραθυρικές εφαρμογές (Graphical User Interfaces, GUIs) με χρήση της βιβλιοθήκης Swing. Οι παραθυρικές εφαρμογές είναι διαφορετικές από τις εφαρμογές που | + | Σε αυτή την ενότητα θα δούμε πως μπορούμε να κατασκευάσουμε παραθυρικές εφαρμογές (Graphical User Interfaces, GUIs) με χρήση της βιβλιοθήκης |
| - | ===== Events | + | Το παρακάτω σχήμα **Α** δείχνει το παράδειγμα μίας εφαρμογής swing που αποτελείται από μόνο ένα κουμπί (button). O χρήστης κάθε φορά που πατά το κουμπί με το ποντίκι (αριστερό click) δημιουργείται ένα event του τύπου ActionEvent. To event μπορούμε να επιλέξουμε να " |
| - | Τα παραθυρικά προγράμματα Swing χρησιμοποιούν events και //event handlers//. Ένα event είναι ένα αντικείμενο που λειτουργεί ως ερέθισμα σε ένα | + | ^Α. Παράδειγμα γραφικού περιβάλλοντος |
| - | + | |{{ : | |
| - | < | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | Το παραπάνω σχήμα απεικονίζει γραφικά την σχέση | + | |
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
| - | Βασικό χαρακτηριστικό του event driven προγραμματισμού είναι ότι δημιουργούμε αντικείμενα και μεθόδους (event listeners) τα οποία δεν γνωρίζουμε αν θα κληθούν και με ποια σειρά θα κληθούν, | + | Βασικό χαρακτηριστικό του event driven προγραμματισμού είναι ότι δημιουργούμε αντικείμενα και μεθόδους (event listeners) τα οποία δεν γνωρίζουμε αν θα κληθούν και με ποια σειρά θα κληθούν, |
| </ | </ | ||
| - | ===== Το πρώτο μου πρόγραμμα | + | Το γραφικό |
| - | Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή. Κατεβάστε και τρέξτε τα επόμενα δύο αρχεία. | + | {{ : |
| - | <code java FirstWindow.java> | + | | Προηγούμενο: |
| - | import javax.swing.JFrame; | + | |
| - | import javax.swing.JButton; | + | |
| - | public class FirstWindow { | ||
| - | public static final int WIDTH = 300; | ||
| - | public static final int HEIGHT = 200; | ||
| - | | ||
| - | public static void showGUI() { | ||
| - | JFrame firstWindow = new JFrame(); | ||
| - | firstWindow.setSize(WIDTH, | ||
| - | firstWindow.setTitle(" | ||
| - | firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); | ||
| - | JButton endButton = new JButton(" | ||
| - | EndingListener buttonEar = new EndingListener(); | ||
| - | endButton.addActionListener(buttonEar); | ||
| - | firstWindow.add(endButton); | ||
| - | firstWindow.setVisible(true); | ||
| - | } | ||
| - | | ||
| - | public static void main(String[] args) { | ||
| - | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
| - | public void run() { | ||
| - | showGUI(); | ||
| - | } | ||
| - | }); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <code java EndingListener.java> | ||
| - | import java.awt.event.*; | ||
| - | |||
| - | public class EndingListener implements ActionListener { | ||
| - | public void actionPerformed(ActionEvent e) { | ||
| - | System.exit(0); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Ας εξετάσουμε όμως τι κάνει το πρόγραμμα μας. Αρχικά δημιουργούμε ένα αντικείμενο του τύπου //JFrame// μέσα από την κλήση. | ||
| - | <code java> | ||
| - | JFrame firstWindow = new JFrame(); | ||
| - | </ | ||
| - | Το αντικείμενο αυτό είναι ένα απλό παράθυρο με τρία κουμπιά (minimize, resize, close). Στη συνέχεια ορίζουμε το μέγεθος του παραθύρου (σε pixels) και τον τίτλο του. | ||
| - | <code java> | ||
| - | firstWindow.setSize(WIDTH, | ||
| - | firstWindow.setTitle(" | ||
| - | </ | ||
| - | Από την εμπειρία σας γνωρίζετε ότι όταν πατήσετε το κουμπί για το κλείσιμο του παραθύρου τότε το παράθυρο κλείνει και η εφαρμογή τερματίζεται. Η παρακάτω γραμμή διαχειρίζεται διαφορετικά ένα click event στο κουμπί κλεισίματος του παραθύρου, | ||
| - | <code java> | ||
| - | firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); | ||
| - | </ | ||
| - | |||
| - | Στην συνέχεια ορίζουμε ένα αντικείμενο τύπου JButton (κουμπί) με τίτλο "Click to end program." | ||
| - | <code java> | ||
| - | JButton endButton = new JButton(" | ||
| - | EndingListener buttonEar = new EndingListener(); | ||
| - | endButton.addActionListener(buttonEar); | ||
| - | </ | ||
| - | |||
| - | Προσθέτουμε το κουμπί στο παράθυρο και ορίζουμε ότι το παράθυρο που φτιάξαμε θέλουμε να είναι ορατό. | ||
| - | <code java> | ||
| - | firstWindow.add(endButton); | ||
| - | firstWindow.setVisible(true); | ||
| - | </ | ||
| - | ==== Χρήση μίας ανώνυμης κλάσης ActionListener ==== | ||
| - | |||
| - | Για να μην έχουμε πολλαπλά αρχεία, | ||
| - | |||
| - | <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, | ||
| - | firstWindow.setTitle(" | ||
| - | firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); | ||
| - | JButton endButton = new JButton(" | ||
| - | | ||
| - | 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) { | ||
| - | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
| - | public void run() { | ||
| - | showGUI(); | ||
| - | } | ||
| - | }); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== Το παραπάνω παράθυρο ως αυτόνομη κλάση ==== | ||
| - | |||
| - | Αν θέλατε να δημιουργήσετε μία κλάση που να υλοποιεί το συγκεκριμένο παράθυρο, | ||
| - | |||
| - | <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, | ||
| - | firstWindow.setTitle(" | ||
| - | firstWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); | ||
| - | JButton endButton = new JButton(" | ||
| - | ActionListener buttonEar = new ActionListener() { | ||
| - | public void actionPerformed(ActionEvent e) { | ||
| - | System.exit(0); | ||
| - | } | ||
| - | }; | ||
| - | endButton.addActionListener(buttonEar); | ||
| - | firstWindow.add(endButton); | ||
| - | } | ||
| - | | ||
| - | public static void main(String[] args) { | ||
| - | javax.swing.SwingUtilities.invokeLater(new Runnable() { | ||
| - | public void run() { | ||
| - | showGUI(); | ||
| - | } | ||
| - | }); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== Βασικές μέθοδοι της κλάσης JFrame ==== | ||
| - | |||
| - | Οι βασικές μέθοδοι της κλάσης JFrame είναι οι παρακάτω: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * JFrame.**DO_NOTHING_ON_CLOSE**: | ||
| - | * JFrame.**HIDE_ON_CLOSE**: | ||
| - | * JFrame.**DISPOSE_ON_CLOSE**: | ||
| - | * JFrame.**EXIT_ON_CLOSE**: | ||
| - | |||
| - | <WRAP tip 80% center round> | ||
| - | Η μέθοδος '' | ||
| - | </ | ||