CentraleSupélecDépartement informatique
Plateau de Moulon
3 rue Joliot-Curie
F-91192 Gif-sur-Yvette cedex
Une solution possible de l'exercice Interface graphique en Java avec Swing

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