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:29] – [Οι βασικοί τύποι των διαφορετικών Event] 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 Listeners ===== | ||
- | |||
- | Για τον πιάσιμο των παραπάνω τύπων events, η Java ορίζει ένα σύνολο από interfaces, τα οποία τα οποία όταν υλοποιούνται σε μία κλάση έχουν την δυνατότητα να πιάνουν συγκεκριμένους τύπους από events. Οι κυριότεροι Event Listeners είναι οι εξής: | ||
- | * **java.util.EventListener: | ||
- | * **ActionListener: | ||
- | * **KeyListener: | ||
- | * **MouseListener: | ||
- | * **MouseMotionListener: | ||
- | * **MouseWheelListener: | ||
- | * **WindowListener: | ||
- | ===== Πιάνοντας ένα 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.1521484186.txt.gz · Last modified: 2018/03/19 18:29 by gthanos