|
Trouver une ressource
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)
Informations & options pour cette discussion
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|