Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : methode paint appelée mais qui ne peint rien [ Archives / Au secours ] (seb87)

mercredi 9 juin 2004 à 09:35:55 | methode paint appelée mais qui ne peint rien

seb87

bonjour, je me bats toujour avec mes images.
ma nouvelle question est a propos de la surdefinition de paint.

j'ai une image sur laquelle je dessine des points sur click lorsque je redemensionne ma fenetre je perd mes points.
j'ai donc surdefini la methode paint dans le JScrollPane , la fonction paint qui affiche les points est alors bien appelée mais rien ne s'affiche . ci joint le code.


package com.hicef.ctrlVisClt;
import javax.swing.*;



import java.awt.*;
import java.awt.event.*;

/**
*
*
* Classe permettant la gestion des scrollBars
*/
class ImageScroller extends JScrollPane
{JPanel p;
AjoutDefaut NewDef;
public ImageScroller(Icon icon)
{
super();

JPanel p = new JPanel(new BorderLayout());

JLabel LabPlan = new JLabel(icon);
p.add(LabPlan , BorderLayout.CENTER);

getViewport().add(p);



JScrollBar vsb = getVerticalScrollBar();
JScrollBar hsb = getHorizontalScrollBar();

vsb.setValue(icon.getIconHeight());
hsb.setValue(icon.getIconWidth()/10);
final int largeur = icon.getIconWidth();
final int hauteur = icon.getIconHeight();


// taille a recupere dans la Base de donnéees

NewDef = new AjoutDefaut(icon.getIconHeight(),icon.getIconWidth(),p);
MouseListener ListenerPlan = NewDef ;
p.addMouseListener(ListenerPlan);

}


public int GetLabelHeight()
{if (p.getHeight()==0 )
return 0;
else
return p.getHeight();
}


//fonction paint surdefinie
public void paint(Graphics g)
{
super.paint(g);
NewDef.paint(g);
System.out.println("appel de paint");
}
}


/////////// Classe de captage de l'evenement
class AjoutDefaut implements MouseListener
{

public AjoutDefaut(int hauteur, int largeur, JPanel p){

this.hauteur = hauteur;
this.largeur = largeur;
TmpPan = p;



}


private JPanel TmpPan;
private float RatioX;
private float RatioY;
private int hauteur;
private int largeur;
private int BorderH;
private int BorderW;
private float X, Y, PixX, PixY ;
private DrawDefect ListOfDefect = new DrawDefect();


final int SizeXmm = 125;
final int SizeYmm = 64;

public void init (Graphics g)
{
//affetation du contexte graphique
ListOfDefect.SetGraphicContent(g);
}

public void setRatioX()
{
this.RatioX = (float)SizeXmm/largeur;
}
public void setRatioY()
{
this.RatioY = (float)SizeYmm/hauteur;
}

public void mouseClicked(MouseEvent me)
{
init(TmpPan.getGraphics());
setRatioX();
; setRatioY();

// calcul des coordonnées du composant ou de la patte séléctionnée
//Si la hauteur de la zone d'affichage est plus grande que l'image
if (TmpPan.getHeight() > hauteur)
//Calcul de la bordure sur la hauteur
{
BorderH = (TmpPan.getHeight() - hauteur)/2;
PixY = Math.abs((me.getY()- hauteur)-BorderH);
System.out.println(PixY);
//System.out.println(Math.abs((me.getY()- hauteur)-BorderH)* this.RatioY);

Y = PixY * this.RatioY;
}
else
{
//System.out.println(Math.abs((me.getY()- hauteur))* this.RatioY);
PixY = Math.abs((me.getY()- hauteur));
Y = PixY * this.RatioY;
BorderH = 0;
System.out.println(PixY);
}

// Si la largeur de la zone d'affichage est plus grande que l'image
if (TmpPan.getWidth() > largeur)
//Calcul de la bourdure sur la largeur
{
BorderW = (TmpPan.getWidth()-largeur)/2;
PixX = (me.getX()-BorderW);
//System.out.println((me.getX()-BorderW) * this.RatioX);
X = PixX * this.RatioX;
System.out.println(PixX);
}
else
{
//System.out.println((me.getX()) * this.RatioX);
PixX = me.getX();
X = PixX * this.RatioX;
System.out.println(PixX);
BorderW=0;
}
ListOfDefect.AddElement((int)X,(int)Y, me.getX()-BorderW ,me.getY()-BorderH );
//ListOfDefect.AddElement((int)X,(int)Y, (int)PixX,(int)PixY );
paint(TmpPan.getGraphics());
}

public void paint(Graphics gc) {
//Gestion de l'affichage des défauts
int CurrentBorderX;
int CurrentBorderY;

if (TmpPan.getHeight() > hauteur)
CurrentBorderY = (TmpPan.getHeight() - hauteur)/2;
else
CurrentBorderY = 0;

if (TmpPan.getWidth() > largeur)
CurrentBorderX = (TmpPan.getWidth() - largeur)/2;
else
CurrentBorderX = 0;


ListOfDefect.DrawPoint(CurrentBorderX, CurrentBorderY);
}

public void mouseEntered(MouseEvent arg0) { }

public void mouseExited(MouseEvent arg0) { }

public void mousePressed(MouseEvent arg0) { }

public void mouseReleased(MouseEvent arg0) { }
}

//////////////// Classe qui dessine les, points

package com.hicef.ctrlVisClt;
import java.awt.*;
import java.awt.event.MouseEvent;

import javax.swing.*;
import java.util.*;
import javax.swing.event.*;

public class DrawDefect {
private Point Defect;

private Graphics g;
private Vector ListDefaut;

public DrawDefect()
{
//creation de la liste des defaut
ListDefaut = new Vector();
}

public void SetGraphicContent(Graphics gc)
{
this.g = gc;
}
protected void paintComponent(Graphics gc)
{
System.out.println("fg");
}


//methode de dessin
public void DrawPoint(int CurrentBorderX, int CurrentBorderY)
{
int nbElement = ListDefaut.size();
DefectTracer TheDefect;

for (int i = 0; i < nbElement; i++)
{
TheDefect = (DefectTracer) ListDefaut.elementAt(i);
g.setColor(new Color(255,102,51));

g.drawOval((TheDefect.RealX + CurrentBorderX)-3 , (TheDefect.RealY + CurrentBorderY)-3 ,7,7);
System.out.println("Début");
System.out.println("real X : " + TheDefect.RealX);
System.out.println("real Y : " + TheDefect.RealY);
System.out.println("Fin");
}
}

public void AddElement(int X, int Y, int RealX, int RealY )
{
ListDefaut.addElement(new DefectTracer(new Point(X,Y),RealX,RealY));
}

public void RemoveElement(DefectTracer defect)
{
ListDefaut.remove(defect);
}

public boolean BdExist(DefectTracer defect)
{
//Recherche dans la BD
return true;
}

public void GetInfoComponent(String CompId)
{
//recuperation des info sur le composant
}

/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
*/

}

class DefectTracer
{
protected Point Defect;
protected int RealX, RealY;

DefectTracer(Point Point, int RealX, int RealY)
{
this.Defect = Point;
this.RealX = RealX;
this.RealY = RealY;
}
}




question subsidaire, en suivant le deroulement du programme j'ai pu noté que la methode paint était sollicité quasiment en permanance , j'ai un peu peur que ca plombe les performances !!



mercredi 9 juin 2004 à 11:08:51 | Re : methode paint appelée mais qui ne peint rien

safisoft


Je X que t'as trops agrandis les choses!!
tu pe faire tous ca avec une seule class.
t'aurrais pu heriter du panel et surcharger sa méthode paint; je te donnerais un bout de code au plus procha possible.

mercredi 9 juin 2004 à 11:21:50 | Re : methode paint appelée mais qui ne peint rien

seb87


Ok merci , en fait j'avais peur que ca fasse un peu trop brouillon de tt mettre ds une classe. en plus je savais pas trop comment faire se que je voulais donc on fait des erreurs ;o)

j'attends ton bout de code

merci

mercredi 9 juin 2004 à 12:14:32 | Re : methode paint appelée mais qui ne peint rien

safisoft


Voici mon code, je viens de l'ecrir et de le tester; ca marche bien:



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;


public class Essai extends JFrame{
Essai(){
super("essai");
setSize(200,200);
setResizable(false);
getContentPane().add("Center",new Pan());
show();
}
public static void main(String[] args){
new Essai();
}
}

class Pan extends JPanel implements MouseListener{
Image arrPlan;
Vector points;
Pan(){
super();
Toolkit tk=Toolkit.getDefaultToolkit();
arrPlan=tk.getImage("./logo.gif");
points=new Vector();
addMouseListener(this);
}

public void paint(Graphics g){
g.drawImage(arrPlan,0,0,this);
g.setColor(Color.red);
for(int i=0;i<points.size();i++){
g.fillOval((int)((Point)points.get(i)).getX(),(int)((Point)points.get(i)).getY(),3,3);
}
}

public void update(Graphics g){
paint(g);
}

public void mouseClicked(MouseEvent e){
points.add(e.getPoint());
repaint();
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}

}

mercredi 9 juin 2004 à 13:23:44 | Re : methode paint appelée mais qui ne peint rien

seb87

bien je vais vois ce que je peux faire avec ca .

encore merci pour toi je te tiens au courant :o)


mercredi 9 juin 2004 à 14:02:38 | Re : methode paint appelée mais qui ne peint rien

seb87

alors ca marche bien par contre quand je clique pour rajouter un point j'ai l'image ainsi que les onglets qui se redessine derriere (decalé vers le bas)

mon image etant contenu dans un Jtabbed lui même contenu dans un conteneur , contenu dans ma frame . bon je sais y avait peut etre plus simple mais ca ma premiere application graphique en java .

deuxiemement je n'ai plus les scrollbar qui s'affiche qd l'image est trop grande et ceux même si j'ai fait heriter la classe de JScrollPane et que j'ai coller le bout de code que j'avais avant.

pourais tu m'expliquais a quoi sert toolkit . En effet aupparavant j'avais mon image dans un jlabel ce qui me permettait d'avoir ses dimensions (entre autres ). Dimensions qui m'etaient utile lors du redimensionnement de la fenetre pour caluler l'affichage au bon endrot des points

jespere etre suffisemment clair :o)

mercredi 9 juin 2004 à 14:37:35 | Re : methode paint appelée mais qui ne peint rien

seb87


ok dans le mouseclick j'ai remplacer le repainr par paint(this.getGraphics()); ce qui m'evite de dessiner 2 fois le dessin.
par contre pour les scrollbar je seche tjrs ya til un moyen de les associé au toolkit ?

mercredi 9 juin 2004 à 16:22:09 | Re : methode paint appelée mais qui ne peint rien

seb87


par rapport a mon message precedent en fait ca marche, donc si je reprend ton exemple quand le clique , il me redessine l'integralité de ma frenetre. est il possible de faire une sorte de clear???




Cette discussion est classé dans : public, int, system, hauteur, void


Répondre à ce message

Sujets en rapport avec ce message

probleme de raffraichissement d'image [ par Azdruyel ] Bonjour a tous!Aujourd'hui,un nouveau jour, et donc un nouveau probleme!!!Alors voila, mon truc c'est que j'affiche en fond dans un JPanel une image ( non-static variable this cannot be referenced from a static context [ par organik ] Bonjour..j'ai un souci à la compilation d'un programme... j'ai le message d'erreur : "non-static variable this cannot be referenced from a static con Piles [ par Flooby ] Bonjour, je suis vraiment debutant en JAVA et j'ai besoin d'aide pour mon cours d'algo car j'ai un exposé a rendre demain.J'aimerai effectuer l'implem Implementation d'une pile [ par Flooby ] Bonjour, je suis vraiment debutant en JAVA et j'ai besoin d'aide pour mon cours d'algo car j'ai un exposé a rendre demain.J'aimerai effectuer l'implem pb Keylistener [ par lenneth666 ] punaiz jdevien fou, j'ai regardé plein de tutoriaux sur lé keylistener et ca ne marche pas. Voici mon code public class Chenille extends JFrame imp clonage profond [ par 3615jenveux ] Bonjour,Je désirerais faire un clonage profond d'un objet "Plateau" qui contient  une unique propriété : un int[][] nommé "plateau".Or si j'ai bien ré KeyListener qui ne marche pas [ par Palleas_44 ] Bonjour ;)Je débute en java et souhaiterai écrire mon tout premier jeu, le probleme c'eest pour deplacer mon personnage, ca ne marche pas !Voici mon c JComboBox KeyListener [ par Ombitious_Developper ] Salut:Voici mon code:public class MyComboBox extends ComboBox implements KeyListener {    public MyComboBox (Vector vect) {       super ();           dessin graphique 2d [ par huongthuy ] Bonjour tout le monde! je suis étudiant.j'ai un projet.Le projet demande les fonctions:la fonction linéaire y = ab, la fonction affine y = ax+b, <td c besoin d'aide pour mon programme java [ par pouyoudu17 ] Bonjour,J'ai fait un programme java pour faire un annuaire mais il y a quelques erreurs.<b


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.