import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** * Ce fichier contient une correction possible pour l'exercice de l'oscilloscope simple * L'ecran affiche un contenu aleatoire que l'on modifie e l'appui d'un bouton. * Le programme se sert de HelloWorldSwing comme base (meme si ce n'est pas ideal) * * @author loic * */ public class OscilloSimple { public static void createAndShowGUI() { // Creer la fenetre de l'application // Le layout par defaut est le BorderLayout final JFrame frame = new JFrame("Oscilloscope"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ajouter au centre la zone de dessin frame.getContentPane().add(new AfficheurFixe()); // Ajouter le message en bas frame.getContentPane().add(new JLabel("Cliquer sur le bouton pour rafraichir l'ecran de l'oscilllocope"), BorderLayout.SOUTH); // Ajouter le bouton a droite JButton bouton = new JButton("Rafraichir"); frame.getContentPane().add(bouton, BorderLayout.EAST); // definir le gestionnaire du bouton en tant que classe anonyme bouton.addActionListener(new AbstractAction() { public void actionPerformed(ActionEvent event) { frame.repaint(); } }); frame.pack(); frame.setVisible(true); } /** * @param args */ public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } } /** * Cette classe represente la zone de dessin de l'oscilloscope * On specialise la classe JPanel pour ce faire, ce que j'ai appele un JCanvas dans le cours * * @author loic */ class AfficheurFixe extends JPanel { public AfficheurFixe() { super(); setPreferredSize(new Dimension(640, 480)); } public void paintComponent(Graphics g) { // Dessiner le fond du composant g.setColor(Color.white); g.fillRect(0,0, getWidth(), getHeight()); // Choisir la couleur de dessin g.setColor(Color.blue); // Faire un petit dessin ... int pas = 2; int x = 0; for(int i= 0; i< getWidth(); ) { // vive les effets de bord eventuels g.drawLine(i, x, i+=pas, x=(int)(aleatoire()*getHeight())); } } public double aleatoire() { return Math.random(); } // pour le tp sur le jni, // public native double aleatoire(); }