swing:intro
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
swing:intro [2018/03/19 18:14] – [Events και Listeners] gthanos | swing:intro [2020/03/16 10:45] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Δημιουργία παραθυρικών εφαρμογών με Swing ====== | ====== Δημιουργία παραθυρικών εφαρμογών με Swing ====== | ||
- | Σε αυτή την ενότητα θα δούμε πως μπορούμε να κατασκευάσουμε παραθυρικές εφαρμογές (Graphical User Interfaces, GUIs) με χρήση της βιβλιοθήκης **Swing**. Οι παραθυρικές εφαρμογές είναι διαφορετικές από τις εφαρμογές που χρησιμοποιούν την κονσόλα για είσοδο και έξοδο, με την έννοια ότι δεν υφίσταται μία συνεχής ροή προγράμματος, | + | Σε αυτή την ενότητα θα δούμε πως μπορούμε να κατασκευάσουμε παραθυρικές εφαρμογές (Graphical User Interfaces, GUIs) με χρήση της βιβλιοθήκης **Swing**. Οι παραθυρικές εφαρμογές είναι διαφορετικές από τις εφαρμογές που χρησιμοποιούν την κονσόλα για είσοδο και έξοδο, με την έννοια ότι δεν υφίσταται μία συνεχής ροή προγράμματος, |
- | Το παρακάτω σχήμα δείχνει | + | Το παρακάτω σχήμα |
- | + | ||
- | {{ : | + | |
+ | ^Α. Παράδειγμα γραφικού περιβάλλοντος java/ | ||
+ | |{{ : | ||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
Line 14: | Line 14: | ||
Το γραφικό περιβάλλον μίας εφαρμογής αποτελείται από αντικείμενα που αντιπροσωπεύουν οντότητες με τις οποίες ο χρήστης μπορεί να αλληλεπιδράσει. Παραδείγματα, | Το γραφικό περιβάλλον μίας εφαρμογής αποτελείται από αντικείμενα που αντιπροσωπεύουν οντότητες με τις οποίες ο χρήστης μπορεί να αλληλεπιδράσει. Παραδείγματα, | ||
- | {{ : | + | {{ : |
+ | | Προηγούμενο: | ||
- | ===== Events και Listeners ===== | ||
- | |||
- | Όταν ο χρήστης πατήσει ένα πλήκτρο από το πληκτρολόγιο ή μετακινήσει το ποντίκι, | ||
- | |||
- | Ο **//window manager//** δημιουργεί //events// για κάθε απειροελάχιστη μεταβολή της θέσης του ποντικιού ή για το πάτημα ενός κουμπιού από το πληκτρολόγιο. Τα περισσότερα προγράμματα δεν τα ενδιαφέρει το σύνολο των //events// που παράγονται. Προκειμένου ένα πρόγραμμα να μην " | ||
- | |||
- | Θα πρέπει να τονίσουμε ότι υπάρχουν πολλοί διαφορετικοί τύποι event. Για παράδειγμα, | ||
- | ===== Οι βασικοί τύποι των διαφορετικών Event ===== | ||
- | |||
- | Οι κλάσεις των events βρίσκονται μέσα στο πακέτο **java.awt.event**. Οι κυριότεροι τύποι event είναι οι εξής: | ||
- | |||
- | * **AWTEvent: | ||
- | * **ActionEvent: | ||
- | * **KeyEvent: | ||
- | * **MouseEvent: | ||
- | * **MouseWheelEvent: | ||
- | * **WindowEvent: | ||
- | |||
- | ===== Πιάνοντας ένα event μέσω ενός Event Listener ===== | ||
- | |||
- | ===== Το πρώτο μου πρόγραμμα ===== | ||
- | |||
- | Παρακάτω φτιάχνουμε ένα πρώτο απλό παραθυρικό πρόγραμμα το οποίο έχει μόνο ένα κουμπί που τερματίζει την εφαρμογή. Κατεβάστε και τρέξτε τα επόμενα δύο αρχεία. | ||
- | |||
- | <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); | ||
- | firstWindow.setVisible(true); | ||
- | } | ||
- | | ||
- | 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> | ||
- | Η μέθοδος '' | ||
- | </ | ||
swing/intro.1521483290.txt.gz · Last modified: 2018/03/19 18:14 by gthanos