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