import javax.swing.JPanel; import javax.swing.JApplet; import javax.swing.JLabel; import javax.swing.BorderFactory; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.Font; import java.awt.FontMetrics; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; class Indication extends JPanel { int h; Indication() { int hauteur, largeur; Font font = new Font("TimesRoman", Font.BOLD|Font.ITALIC,14); FontMetrics ft = getFontMetrics(font); h = ft.getHeight(); largeur = ft.stringWidth ("bouton gauche + b pour voir un disque bleu "); setPreferredSize(new Dimension(largeur, 6*h + 25)); setFont(font); } public void paintComponent(Graphics g) { int x = 10, y = 40; g.drawString(" r pour voir un cercle rouge", x, y); y += h; g.drawString(" CTRL + r pour voir un disque rouge", x, y); y += h; g.drawString(" b pour voir un cercle bleu", x, y); y += h; g.drawString(" bouton droit + b pour voir un disque bleu", x, y); y += h; g.drawString(" barre d'espace pour descendre le cercle", x, y); y += h; g.drawString(" touche \"arriere\" pour repositionner le cercle", x, y); } } class ArdoiseTouches2 extends JPanel { private Color couleur = Color.BLUE; private boolean plein = false; private int hauteur = 20; ArdoiseTouches2() { setPreferredSize(new Dimension(250, 200)); } public void paintComponent(Graphics g) { int largeur = getSize().width; super.paintComponent(g); g.setColor(couleur); if (plein) g.fillOval((largeur - 100)/2, hauteur, 100, 100); else g.drawOval((largeur - 100)/2, hauteur, 100, 100); } void setCouleur(Color couleur) { this.couleur = couleur; repaint(); } void setPlein(boolean valeur) { plein = valeur; repaint(); } void setHauteur(int valeur) { hauteur = valeur; repaint(); } } class Touches2 extends JPanel implements KeyListener, MouseListener { ArdoiseTouches2 ardoise = new ArdoiseTouches2(); Touches2() { add(new Indication(), BorderLayout.NORTH); add(ardoise, BorderLayout.CENTER); addKeyListener(this); addMouseListener(this); setBorder(BorderFactory.createLineBorder(Color.BLACK)); } public void keyPressed(KeyEvent evt) { int code = evt.getKeyCode(); if (code == KeyEvent.VK_R) { ardoise.setCouleur(Color.RED); if (evt.isControlDown()) ardoise.setPlein(true); else ardoise.setPlein(false); } else if (code == KeyEvent.VK_B) { ardoise.setCouleur(Color.BLUE); if ((evt.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK) != 0) ardoise.setPlein(true); else ardoise.setPlein(false); } else if (code == KeyEvent.VK_SPACE) ardoise.setHauteur(80); else if (code == KeyEvent.VK_BACK_SPACE) ardoise.setHauteur(20); } public void keyTyped(KeyEvent evt) {} public void keyReleased(KeyEvent evt) {} public void mouseEntered(MouseEvent evt) { requestFocus(); } public void mouseExited(MouseEvent evt) {} public void mouseReleased(MouseEvent evt) {} public void mouseClicked(MouseEvent evt) {} public void mousePressed(MouseEvent evt) {} } public class Touches2Applet extends JApplet { public void init() { setContentPane(new Touches2()); } }