Langages de programmation – TP10 Objectifs: GUI avec AWT
Transcription
Langages de programmation – TP10 Objectifs: GUI avec AWT
Langages de programmation – TP10 Objectifs: GUI avec AWT (Abstract Window Toolkit): http://www.falkhausen.de/en/diagram/spec/java.awt.html • java.awt • java.awt.event Théorie: Les étapes de création d'une application avec le modèle AWT: • Conception o la création d'une surface d'affichage (Container: Panel, Applet, Window, Frame, Dialog…) o la création et la mise en place des composants (Button, Checkbox, Choice,...) • Fonctionnalité o définissant les actions o l'écoute de l'action Conception LayoutManager est une interface utilisée pour placer des composants différents dans un Container après un modèle de dispositif. Les classes qui implémentent l'interface sont: FlowLayout (default for Panel), BorderLayout (default for Window), GridLayout, GridBagLayout, CardLayout. Fonctionnalité Source –>événement (de type ActionEvent, MouseEvent,…qui étendent la classe AWTEvent) -> écouteur d'événement (ActionListener, ItemListener, FocusListener,…) Les événements peuvent être: • sémantiques (dus à une interaction entre l’utilisateur et le composant graphique, qui est la source d'événements): ActionEvent, AdjustementEvent, ItemEvent, TextEvent • de bas niveau (de la modification des composants): ComponentEvent, InputEvent, MouseEvent, KeyEvent, FocusEvent, WindowEvent, ContainerEvent Problèmes en classe: 1. Étudiez l’application MyAWT, donnée comme exemple: Ajoutez un bouton nommé “Exit”: si nous appuyons sur ce bouton, nous quitton l'application. 2. Mettez en œuvre un programme pour calculer le prix des billets de train avec cette GUI: Il y a deux types de trains: “Accelerat” et “Intercity”. Le prix du billet est calculé en fonction de la distance entre la ville de départ et de destination et le type de train. E.g.: entre Arad et Bucuresti, il y a 550 km; si nous voulons acheter un billet pour train “Accelerat”, le prix sera: 10* la distance (550); si nous voulons acheter un billet pour train “Intercity”, le prix sera: 15* la distance (550). Nous pouvons acheter plusieur billets. Après avoir cliqué sur le bouton “Calculate”, on obtient le prix total, qui est affiché dans un TextField de type read-only. Les distances sont lues dans le fichier distances.txt: Bucuresti Arad 555 Bucuresti Bacau 289 Bucuresti Azuga 132 Iasi Azuga 328 Iasi Bacau 126 Attention: • dans les combo-boxes, les villes doivent apparaître qu'une seule fois (Tip: vous pouvez utiliser TreeSet ) • quand je change la ville de départ, la ville de destination sont modifiés en conséquence Tip: • Créez une classe de mémoriser les informations du fichier. E.g.: class CityPair { private String departureCity; private String destinationCity; private Integer distance; …………………………………… } Et pour lire du fichier: ArrayList<CityPair> cities = new ArrayList(); SortedSet citiesSet = new TreeSet<String>(); try{ //ATTENTION: the txt file has to be within the project folder FileInputStream fstream = new FileInputStream("distances.txt"); // Get the object of DataInputStream DataInputStream in = new DataInputStream(fstream); // we memorize in a buffer the file content BufferedReader br = new BufferedReader(new InputStreamReader(in)); // the buffer has more lines and we have to read it line by line String strLine; //Read File Line By Line and parse it while ((strLine = br.readLine()) != null) { // in this case, the separator is blank, but it can be any other character String[] words = strLine.split(" "); cities.add(new CityPair(words[0], words[1], Integer.parseInt(words[2]))); citiesSet.add(words[0]); citiesSet.add(words[1]); } //Close the input stream in.close(); } catch (Exception e1){//Catch exception if any System.err.println("Error: " + e1.getMessage()); } • Vous devez traitez les événements: o actionPerformed o itemStateChanged o windowClosing Devoir: 1. Développez une application qui simule la fonctionnalité d'une calculatrice scientifique, avec cette GUI: 2. Développez une application qui permet de dessiner des formes géométriques (cercles, carrés et rectangles), avec la GUI ci-dessous. Les formes dessinées sont remplis et peuvent avoir trois couleurs: rouge, vert ou bleu. Les informations nécessaires (diamètre, largeur, hauteur) changent en fonction des données d'entrée. Par exemple, si l'on veut dessiner un rectangle bleu, l'interface devrait ressembler à: • • • • Lors du choix d'une autre forme géométrique, d'autres champs numériques apparaissent sur la droite. Tip: vous pouvez utilisez CardLayout et traitez l'événement itemStateChanged. Le dessin est fait après avoir appuyé sur le button Draw. Vous devez traitez l'événement actionPerformed. Traitez aussi l'événement de cloture de la fenêtre (windowClosing). Lorsque un texte numérique (par exemple Ox coordinate) perd le focus, vous devriez vérifier si la valeur insérée est numérique. Sinon, annoncez l'utilisateur et supprimez le contenu incorrect! E.g.: • Vous devez utiliser Graphics: E.g.: http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter06/drawing.html