Applet dessin

cs_cyberny Messages postés 6 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 16 juin 2004 - 16 juin 2004 à 13:16
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 - 16 juin 2004 à 16:39
Bonjour @ tous!
J'ai fait une petite applet qui permet de dessiner dont voilà la source (ne me taper pas sur les doigts c mon premier java mais je veux bien avoir des critiques)

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;

import javax.imageio.ImageIO;

public class Dessin extends Applet implements ItemListener,ActionListener,MouseListener,MouseMotionListener{

Panel panel = new Panel();
Panel zoneDessin = new Panel();

String outil;

Button btnStylo = new Button("Crayon");
Button btnPinceau = new Button("Pinceau");
Button btnEraser = new Button("Gomme");
Button btnExporter = new Button("Enregistrer...");
Choice chColor = new Choice();

Color cEraser = new Color(255,255,255);
Color cBleu = new Color(0,0,255);
Color cRouge = new Color(255,0,0);
Color cVert = new Color(0,255,0);
Color cNoir = new Color(0,0,0);
Color cGris = new Color(180,180,180);
Color cActuelle = cNoir;

Graphics2D dessin,dessinBuffered;

int mouseX , mouseY;

BufferedImage img;

public void init(){

this.setSize(600,400);
setLayout(new BorderLayout(2,1));

outil = "Crayon";

// Configuration de la barre d'outil
chColor.addItem("----");
chColor.addItem("noir");
chColor.addItem("rouge");
chColor.addItem("bleu");
chColor.addItem("vert");
chColor.select(1);

panel.setLayout(new FlowLayout());
panel.add(btnStylo);
panel.add(btnPinceau);
panel.add(btnEraser);
panel.add(chColor);
panel.add(btnExporter);

panel.setBackground(cGris);
panel.setSize(600,40);

btnStylo.addActionListener(this);

btnPinceau.addActionListener(this);

btnEraser.addActionListener(this);

btnExporter.addActionListener(this);

chColor.addItemListener(this);
// ajout de la barre d'outil
add(panel);

// configuation de la zone de dessin
zoneDessin.setLayout(new BorderLayout());
zoneDessin.setBackground(cEraser);
zoneDessin.setSize(600,360);

// ajout de la zone de dessin
add(zoneDessin);

zoneDessin.addMouseListener(this);
zoneDessin.addMouseMotionListener(this);

img = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);

dessinBuffered = img.createGraphics();
dessin = (Graphics2D)zoneDessin.getGraphics();
dessinBuffered.setColor(cEraser);
dessinBuffered.fillRect(0,0,600,400);

}

//choix des outils selon les boutons pressés
public void actionPerformed(ActionEvent e){
String btn = e.getActionCommand();

//si on est en gomme reprendre la couleur noir par defaut
if(cActuelle.equals(cEraser)){
chColor.select(1);
cActuelle = cNoir;
}

//choix du crayon
if (btn.equals("Crayon")){
outil = "Crayon";
//choix du pinceau
}else if (btn.equals("Pinceau")){
outil = "Pinceau";
//choix de la gomme (reprendre la couleur blanche!)
}else if (btn.equals("Gomme")){
outil = "Gomme";
cActuelle = cEraser;
chColor.select(0);
}else if (btn.equals("Enregistrer...")){
save();
}

}

//choix de la couleur
public void itemStateChanged(ItemEvent e){

String choix = (String)e.getItem();

//si l'outil est la gomme on ne change pas de couleur
if(outil.equals("Gomme")){
chColor.select(0);
cActuelle = cEraser;
//si on choisi le premier on repasse automatiquement au noir (couleur par defaut)
}else if(choix.equals("----")){
chColor.select(1);
cActuelle = cNoir;
//choix des couleurs
}else if(choix.equals("noir")){
cActuelle = cNoir;
}else if(choix.equals("rouge")){
cActuelle = cRouge;
}else if(choix.equals("bleu")){
cActuelle = cBleu;
}else if(choix.equals("vert")){
cActuelle = cVert;
}

};

public void mousePressed(MouseEvent e){
int x,y;
//recuperation des coordonnées
x = e.getX();
y = e.getY();

//mise à jour des coordonnées
mouseX = x;
mouseY = y;
}

public void mouseDragged(MouseEvent e){
int x,y;
//recuperation des coordonnées
x = e.getX();
y = e.getY();

//mise à jour de la couleur
dessin.setColor(cActuelle);
dessinBuffered.setColor(cActuelle);

//dessin de la forme en fonction de la forme choisie
if (outil.equals("Gomme")){
//dessin.fillRect(mouseX-10,mouseY-10,20,20);
dessinBuffered.fillRect(mouseX-10,mouseY-10,20,20);
}else if(outil.equals("Pinceau")){
//dessin.fillOval(mouseX-3,mouseY-3,6,6);
dessinBuffered.fillOval(mouseX-3,mouseY-3,6,6);
}else if(outil.equals("Crayon")){
//dessin.drawLine(mouseX,mouseY,x,y);
dessinBuffered.drawLine(mouseX,mouseY,x,y);
}

dessin = dessinBuffered;

//mise à jour des coordonnées
mouseX = x;
mouseY = y;

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseMoved(MouseEvent e) {}

public void save(){
try{

FileOutputStream file = new FileOutputStream("ZePicture.jpg");

ImageIO.write(img,"jpeg",file);

file.close();

//changement de page pour l'enregistrement
try{

URL ul=new URL("http://cyberny.free.fr/berny/?fichier="+file);
AppletContext ac=getAppletContext();
ac.showDocument(ul,"_self");
}catch(Exception e){

dessin.setColor(cNoir);
dessin.drawString(e.getMessage(),100,100);
dessin.setColor(cActuelle);
}

}catch(IOException e){
dessin.setColor(cNoir);
dessin.drawString(e.getMessage(),100,100);
dessin.setColor(cActuelle);
}catch(Exception e){
dessin.setColor(cNoir);
dessin.drawString(e.getMessage(),100,100);
dessin.setColor(cActuelle);
}

}
}//fin class Dessin

j'ai deux problèmes sur cette applet :

1) quand je reduit la fenetre et que je reviens dessus le dessin s'efface....
2) je ne peux pas enregistrer le dessin donc je voudrais la passer en parametre d'url en mode binaire pour la recupere en PHP (ben vi free heberge que du PHP)

Merci pour votre aide futur...

10 réponses

cs_cyberny Messages postés 6 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 13:26
oups c pas la bonne version du source .....

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;

import javax.imageio.ImageIO;

public class Dessin extends Applet implements ItemListener,ActionListener,MouseListener,MouseMotionListener{

Panel panel = new Panel();
Panel zoneDessin = new Panel();

String outil;

Button btnStylo = new Button("Crayon");
Button btnPinceau = new Button("Pinceau");
Button btnEraser = new Button("Gomme");
Button btnExporter = new Button("Enregistrer...");
Choice chColor = new Choice();

Color cEraser = new Color(255,255,255);
Color cBleu = new Color(0,0,255);
Color cRouge = new Color(255,0,0);
Color cVert = new Color(0,255,0);
Color cNoir = new Color(0,0,0);
Color cGris = new Color(180,180,180);
Color cActuelle = cNoir;

Graphics2D dessin,dessinBuffered;

int mouseX , mouseY;

BufferedImage img;

public void init(){

this.setSize(600,400);
setLayout(new BorderLayout(2,1));

outil = "Crayon";

// Configuration de la barre d'outil
chColor.addItem("----");
chColor.addItem("noir");
chColor.addItem("rouge");
chColor.addItem("bleu");
chColor.addItem("vert");
chColor.select(1);

panel.setLayout(new FlowLayout());
panel.add(btnStylo);
panel.add(btnPinceau);
panel.add(btnEraser);
panel.add(chColor);
panel.add(btnExporter);

panel.setBackground(cGris);
panel.setSize(600,40);

btnStylo.addActionListener(this);

btnPinceau.addActionListener(this);

btnEraser.addActionListener(this);

btnExporter.addActionListener(this);

chColor.addItemListener(this);
// ajout de la barre d'outil
add(panel);

// configuation de la zone de dessin
zoneDessin.setLayout(new BorderLayout());
zoneDessin.setBackground(cEraser);
zoneDessin.setSize(600,360);

// ajout de la zone de dessin
add(zoneDessin);

zoneDessin.addMouseListener(this);
zoneDessin.addMouseMotionListener(this);

img = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB);

dessinBuffered = img.createGraphics();
dessin = (Graphics2D)zoneDessin.getGraphics();
dessinBuffered.setColor(cEraser);
dessinBuffered.fillRect(0,0,600,400);

}

//choix des outils selon les boutons pressés
public void actionPerformed(ActionEvent e){
String btn = e.getActionCommand();

//si on est en gomme reprendre la couleur noir par defaut
if(cActuelle.equals(cEraser)){
chColor.select(1);
cActuelle = cNoir;
}

//choix du crayon
if (btn.equals("Crayon")){
outil = "Crayon";
//choix du pinceau
}else if (btn.equals("Pinceau")){
outil = "Pinceau";
//choix de la gomme (reprendre la couleur blanche!)
}else if (btn.equals("Gomme")){
outil = "Gomme";
cActuelle = cEraser;
chColor.select(0);
}else if (btn.equals("Enregistrer...")){
save();
}

}

//choix de la couleur
public void itemStateChanged(ItemEvent e){

String choix = (String)e.getItem();

//si l'outil est la gomme on ne change pas de couleur
if(outil.equals("Gomme")){
chColor.select(0);
cActuelle = cEraser;
//si on choisi le premier on repasse automatiquement au noir (couleur par defaut)
}else if(choix.equals("----")){
chColor.select(1);
cActuelle = cNoir;
//choix des couleurs
}else if(choix.equals("noir")){
cActuelle = cNoir;
}else if(choix.equals("rouge")){
cActuelle = cRouge;
}else if(choix.equals("bleu")){
cActuelle = cBleu;
}else if(choix.equals("vert")){
cActuelle = cVert;
}

};

public void mousePressed(MouseEvent e){
int x,y;
//recuperation des coordonnées
x = e.getX();
y = e.getY();

//mise à jour des coordonnées
mouseX = x;
mouseY = y;
}

public void mouseDragged(MouseEvent e){
int x,y;
//recuperation des coordonnées
x = e.getX();
y = e.getY();

//mise à jour de la couleur
dessin.setColor(cActuelle);
dessinBuffered.setColor(cActuelle);

//dessin de la forme en fonction de la forme choisie
if (outil.equals("Gomme")){
dessin.fillRect(mouseX-10,mouseY-10,20,20);
dessinBuffered.fillRect(mouseX-10,mouseY-10,20,20);
}else if(outil.equals("Pinceau")){
dessin.fillOval(mouseX-3,mouseY-3,6,6);
dessinBuffered.fillOval(mouseX-3,mouseY-3,6,6);
}else if(outil.equals("Crayon")){
dessin.drawLine(mouseX,mouseY,x,y);
dessinBuffered.drawLine(mouseX,mouseY,x,y);
}

//mise à jour des coordonnées
mouseX = x;
mouseY = y;

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseMoved(MouseEvent e) {}

public void save(){
try{

FileOutputStream file = new FileOutputStream("ZePicture.jpg");

ImageIO.write(img,"jpeg",file);

file.close();

//changement de page pour l'enregistrement
try{

URL ul=new URL("http://cyberny.free.fr/?fichier="+file);
AppletContext ac=getAppletContext();
ac.showDocument(ul,"_self");
}catch(Exception e){

dessin.setColor(cNoir);
dessin.drawString(e.getMessage(),100,100);
dessin.setColor(cActuelle);
}

}catch(IOException e){
dessin.setColor(cNoir);
dessin.drawString(e.getMessage(),100,100);
dessin.setColor(cActuelle);
}catch(Exception e){
dessin.setColor(cNoir);
dessin.drawString(e.getMessage(),100,100);
dessin.setColor(cActuelle);
}

}
}//fin class Dessin

voila qui marche mieux... :p dsl pour le flood
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
16 juin 2004 à 13:33
A chaque evenement sur la fenetre, la methode paint(Graphic g) est appelé.

Bref il faut que tu l'implementes pour que ca fasse le dessin.
0
cs_cyberny Messages postés 6 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 13:44
mon dessin se fait bien (http://cyberny.free.fr/berny) mais quand tu reduit la page html et que tu la restore le dessin disparait c clairement un probleme de buffer .....
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
16 juin 2004 à 13:54
non c'est un probleme que comme t'as pas overloader la methode public void paint(Graphic g), quand il redimentionne la fenetre, que tu restore qqchse etc etc , il appelle paint(g) et donc ne fait rien.

Generalement, on stocke les infos pour faire le dessin, puis on apelle invalidate(true); qui appelle le paint.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cyberny Messages postés 6 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 14:08
je suis completement pommé....
j'implement ma methode paint (Graphics g).

si g compris elle est appelé à chaque evennement de l'applet (redimensionnement, focus....)

mais comment ca marche la je suis sur que je m'y prends tres tres tres mal j'ai un graphics qui trace le graphic sur le panel plus un qui buffer le dessin afin de l'enregistrer dans un fichier(ca ca va changer mais j'ai besoin d'un buffer)

la g un Graphics g dans paint comment ca marche ??
je peux pas dire g = dessinBuffer....

t'as un exemple j'arrive pas a trouver le truc ...

Merci pour ton aide
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
16 juin 2004 à 14:38
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

/**
* Created by IntelliJ IDEA.
* User: IntelliJ EAP Member
* Date: 16 juin 2004
* Time: 14:21:27
* To change this template use File | Settings | File Templates.
*/
public class Main extends JFrame{
private Point p1,p2;

public Main(){
p1=new Point(10,10);
p2=new Point(30,30);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

this.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {
point(e.getPoint());
}

public void mouseReleased(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}
});
}

public static void main(String[] args) {
Main m=new Main();
m.setSize(300,300);
m.setVisible(true);
}

public void paint(Graphics g){
g.clearRect(0,0,300,300);
g.setColor(Color.red);
g.drawLine(p1.x,p1.y, p2.x,p2.y);
}

private void point(Point p){
p1=p2;p2=p;
this.repaint(); /* Avant c'etait invalidate il me semble mais bon...*/
}
}
0
cs_cyberny Messages postés 6 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 15:16
j'ai remis les coptuers à 0 j'ai donc une nouvelle applet :

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Dessin2 extends Applet implements MouseListener,MouseMotionListener{

int x0,x1,y0,y1;
Graphics g;
public void init(){
addMouseListener(this);
addMouseMotionListener(this);
}

public void paint (Graphics g){
g.drawLine(x0,y0,x1,y1);
}

public void mousePressed(MouseEvent e){
x0 = e.getX();
y0 = e.getY();
x1 = x0;
y1 = y0;
}

public void mouseDragged(MouseEvent e){
x0 = e.getX();
y0 = e.getY();
paint(this.getGraphics());
x1 = x0;
y1 = y0;
}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseMoved(MouseEvent e) {}

}

lorsque je quitte et que je reviens il me garde que le dernier point y a du progres... mais keskicloche?
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
16 juin 2004 à 15:35
tu n'as EN AUCUN CAS le droit d'appeller paint.

C'est le systeme qui l'appelle pour toi! quand tu fait un repaint() (avant c'etait invalidate je pense)

le code de ton mouse pressed et mousse dragged => x0 et x1 identique, y0 et y1 identique

> quand il revient, il trace une ligne entre deux point identique > c'est un point.

pour ton mouseDragged je verrais plutot
x1 = x0;
y1 = y0;
x0 = e.getX();
y0 = e.getY();
repaint();
0
cs_cyberny Messages postés 6 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 16:22
bon j'abandonne ca marche pas ...

dans le premier cas de figure mon dessin est toujours dans le buffer puisque si j'enregistre (ca marche avec eclips) j'ai bien le bon dessin meme si rien est affiché à l'ecran. je peux pas faire un dessine-moi ce que j'ai dans mon buffer?

merci pour ton aide ....
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
16 juin 2004 à 16:39
http://www.blograffiti.com/

Dans ton premier code met
public void paint(Graphics g){
Graphics2D d=(Graphics2D)g;d.drawImage(bufferedImage,null,0,0);
}
0