Solution IHM
Archive zip à importer dans Eclipse comme projet existant
GestionClavier.java
package gloo.testswing; import java.awt.Color; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class GestionClavier implements KeyListener { private MonDessin dessin; public GestionClavier( MonDessin dessin ) { super(); this.dessin = dessin; } @Override public void keyPressed( KeyEvent event ) {} @Override public void keyReleased( KeyEvent event ) { dessin.setCouleur( switch( event.getKeyCode() ) { case KeyEvent.VK_V -> Color.GREEN; case KeyEvent.VK_O -> Color.ORANGE; case KeyEvent.VK_R -> Color.RED; default -> dessin.getCouleur(); } ); } @Override public void keyTyped( KeyEvent event ) {} }
MonDessin.java
package gloo.testswing; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; public class MonDessin extends JPanel { private Image image; private Color couleur; public MonDessin() { super(); couleur = Color.RED; try { image = ImageIO.read( new File( "logo-CS-blanc.png" )); } catch( IOException e ) { e.printStackTrace(); } } @Override public void paint( Graphics g ) { super.paint( g ); g.setColor( couleur ); g.fillRect( 0, 0, 570, 292 ); g.drawImage( image, 0, 0, null ); } public Color getCouleur() { return couleur; } public void setCouleur( Color c ) { couleur = c; repaint(); } }
TestSwing1.java (v1)
package gloo.testswing; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class TestSwing1 implements Runnable { public static void main( String[] args ) { SwingUtilities.invokeLater( new TestSwing1() ); } @Override public void run() { JFrame fenetre = new JFrame( "Graphisme avec Swing" ); fenetre.setPreferredSize( new Dimension( 570, 292 + 20 )); fenetre.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); MonDessin monDessin = new MonDessin(); fenetre.add( monDessin ); fenetre.addKeyListener( new GestionClavier( monDessin )); fenetre.pack(); fenetre.setVisible( true ); } }
MaCouleur.java
package gloo.testswing.entity; import java.awt.Color; public class MaCouleur { private Color color = Color.RED; public Color getColor() { return color; } public void setColor( Color color ) { this.color = color; } }
MonImage.java
package gloo.testswing.entity; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class MonImage { private BufferedImage image; public MonImage( String name ) { try { image = ImageIO.read( new File( name )); } catch( IOException e ) { System.out.println( "Erreur de chargement du dessin" ); System.exit( -1 ); } } public Image getImage() { return image; } public int getWidth() { return image.getWidth(); } public int getHeight() { return image.getHeight(); } }
MonControleur.java
package gloo.testswing.control; import java.awt.Color; import java.awt.Image; import gloo.testswing.entity.MaCouleur; import gloo.testswing.entity.MonImage; public class MonControleur { private MaCouleur couleur; private MonImage image; public MonControleur( MaCouleur couleur, MonImage image ) { this.couleur = couleur; this.image = image; } public void setColor( Color newColor ) { Color current = couleur.getColor(); if( current == Color.RED && newColor == Color.GREEN ) couleur.setColor( newColor ); if( current == Color.GREEN && newColor == Color.ORANGE ) couleur.setColor( newColor ); if( current == Color.ORANGE && newColor == Color.RED ) couleur.setColor( newColor ); } public Color getColor() { return couleur.getColor(); } public Image getImage() { return image.getImage(); } public int getImageWidth() { return image.getWidth(); } public int getImageHeight() { return image.getHeight(); } }
MonAfficheur.java
package gloo.testswing.boundary; import java.awt.Graphics; import javax.swing.JPanel; import gloo.testswing.control.MonControleur; public class MonAfficheur extends JPanel { private MonControleur controleur; public MonAfficheur(MonControleur controleur) { this.controleur = controleur; } @Override public void paint( Graphics graphics ) { graphics.setColor( controleur.getColor() ); graphics.fillRect( 10, 10, controleur.getImageWidth(), controleur.getImageHeight() ); graphics.drawImage( controleur.getImage(), 10,10, null ); } }
MaFenetre.java
package gloo.testswing.boundary; import java.awt.Color; import java.awt.Dimension; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import gloo.testswing.control.MonControleur; public class MaFenetre extends JFrame implements KeyListener { private MonControleur controleur; private MonAfficheur afficheur; public MaFenetre( MonControleur controleur ) { this.controleur = controleur; this.afficheur = new MonAfficheur( controleur ); setTitle( "TestSwing" ); setPreferredSize( new Dimension( 100, 100 )); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); add( afficheur ); pack(); setVisible( true ); addKeyListener( this ); } @Override public void keyPressed( KeyEvent event ) {} @Override public void keyReleased( KeyEvent event ) { controleur.setColor( switch( event.getKeyCode() ) { case KeyEvent.VK_V -> Color.GREEN; case KeyEvent.VK_O -> Color.ORANGE; case KeyEvent.VK_R -> Color.RED; default -> controleur.getColor(); } ); afficheur.repaint(); } @Override public void keyTyped( KeyEvent event ) {} }
TestSwing2.java (v2)
package gloo.testswing; import javax.swing.SwingUtilities; import gloo.testswing.boundary.MaFenetre; import gloo.testswing.control.MonControleur; import gloo.testswing.entity.MaCouleur; import gloo.testswing.entity.MonImage; public class TestSwing2 implements Runnable { public static void main( String[] args ) { SwingUtilities.invokeLater( new TestSwing2() ); } @Override public void run() { MaCouleur dessin = new MaCouleur(); MonImage image = new MonImage( "logo-CS-blanc.png" ); MonControleur controleur = new MonControleur( dessin, image ); MaFenetre fenetre = new MaFenetre( controleur ); } }

© 2021-22 CentraleSupélec