BRUNO1985
Messages postés7Date d'inscriptiondimanche 15 août 2004StatutMembreDernière intervention 4 juillet 2009
-
6 juin 2009 à 15:55
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
8 juin 2009 à 06:43
Bonjour,
La partie du code d'une applet que j'ai réaliser permet de pointer des zones d'une image. Le principe est simple en faite j'ai une image (ImageIcon) sur laquelle je dessine des carré rouge permettant de pointé une zone de l'image.
Sauf que le probléme c'est que dés que je deplace le Jscrollpan l'image ne s'actualise pas et tout devient blanc ...
Voici ma classe Point :
package fr.test.applet;
public class Point {
private float[][] polygone = new float[100][2];
private int NbPoints=0;
public Point() {
}
public float[][] getPolygone() {
return polygone;
}
public int getNbPoints() {
return NbPoints;
}
public void AjouterPoint(int x,int y) {
polygone[NbPoints][0]=x;
polygone[NbPoints][1]=y;
NbPoints++;
}
public void SupprimerPoint(int NumPoint) {
for (int compte=NumPoint;compte<NbPoints;compte++) {
polygone[compte][0]=polygone[compte+1][0];
polygone[compte][1]=polygone[compte+1][1];
}
NbPoints--;
}
public int TrouverPoint(int pointeurX,int pointeurY) {
int numPoint=-1;
int compte=0;
while ((numPoint==-1)&(compte<NbPoints)) {
if (((polygone[compte][0]-pointeurX)<6) & ((polygone[compte][0]-pointeurX)>-6))
if (((polygone[compte][1]-pointeurY)<6) & ((polygone[compte][1]-pointeurY)>-6))
numPoint=compte;
compte++;
}
return numPoint;
}
}
Et ma JApplet :
package fr.test.applet;
import java.awt.*;
import fr.test.applet.Point;
import java.awt.event.*;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class test extends JApplet implements ActionListener, MouseListener ,MouseMotionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
int maxX;
int maxY;
int PointAdeplacer;
boolean DeplacementEffectue;
boolean PointInsere=false;
Point ensemblePoints = new Point();
JButton SupprimerPoint = new JButton ("Supprimer");
JButton insererPoint = new JButton ("Ins?rer un point");
JLabel PositionSouris=new JLabel ("Position curseur: ",Label.LEFT);
JTextField coordonneesSouris=new JTextField(" ",10);
JLabel etatLabel=new JLabel ("Historique des actions :",Label.LEFT);
List etat=new List();
int width = 200;
int height = 200;
private JPanel pan;
private JScrollPane pandefil;
private Container contenu;
private Image backbuffer;
private Graphics backg;
String pointTmp = "";
int x;
int y;
ImageIcon img;
public void init() {
System.out.println(getCodeBase());
img=new ImageIcon("IMAGE.GIF");
setSize(1000, 750);
contenu = getContentPane();
pan = new JPanel();
Dimension d = new Dimension(img.getIconWidth(), img.getIconHeight());
pan.setBackground(Color.WHITE);
pan.setPreferredSize(d);
System.out.println(d.width + ", " + d.height);
pandefil = new JScrollPane(pan);
maxX =img.getIconWidth();
maxY = img.getIconHeight();
pandefil.setAutoscrolls(true);
pandefil.addMouseMotionListener(this);
pandefil.addMouseListener(this);
SupprimerPoint.addActionListener(this);
pandefil.setViewportView(pan);
contenu.add(pandefil, "Center");
backbuffer = createImage(d.width, d.height);
backg = backbuffer.getGraphics();
backg.setColor( Color.white );
affichageMarqueur();
System.out.println(pandefil.getAutoscrolls() + ", Hauteur : " + pan.getHeight()+ ", Hauteur : " + pan.getWidth());
}
//Lorsqu'on clique
public void mouseClicked (MouseEvent evt) {
x = evt.getX();
y = evt.getY();
PointAdeplacer=ensemblePoints.TrouverPoint(x,maxY-y);
if (x> maxX || y > maxY)
System.out.println("Point hors de la surface dessinable");
else {
if (PointAdeplacer==-1){
JOptionPane.showInputDialog(null, "Saisissez un nom");
ensemblePoints.AjouterPoint(x,maxY-y);
}
if (PointAdeplacer!=-1){
DeplacementEffectue=false;
}
System.out.println("x :"+x+" y :"+y);
affichageMarqueur();
repaint();
}
}
//Gestion des ?venements : lorsqu'on appuit sur un bouton
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if (command == "Supprimer") {
if (PointAdeplacer!=-1) {
ensemblePoints.SupprimerPoint(PointAdeplacer);
PointAdeplacer=-1;
}
affichageMarqueur();
repaint();
}
}
public void affichageMarqueur() {
backg.drawImage(img.getImage(),0,0,this);
//Le bouton supprimer est activer uniquement
//si un marqueur a ete selectionner
if(pointTmp != null) {
if (pointTmp.compareTo("")!=0)
SupprimerPoint.setEnabled(true);
else
SupprimerPoint.setEnabled(false);
} else {
pointTmp = "";
SupprimerPoint.setEnabled(false);
}
//Affichage des differents marqueurs
int compte;
int x1;
int y1;
backg.setColor(Color.red);
for (compte=0;compte<(ensemblePoints.getNbPoints());compte++) {
x1=(int) (ensemblePoints.getPolygone()[compte][0]);
y1=maxY - (int) (ensemblePoints.getPolygone()[compte][1]);
if (compte==PointAdeplacer) {
backg.fillRect(x1-4,y1-4,8,8);
}
backg.drawRect(x1-4,y1-4,8,8);
}
}
public void update(Graphics g) {
g.drawImage(backbuffer,0,0,this);
}
public void paint(Graphics g) {
super.paint(g);
update(g);
}
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseDragged (MouseEvent evt) {
// TODO Auto-generated method stub
}
public void mouseReleased (MouseEvent evt) {
// TODO Auto-generated method stub
}
}
BRUNO1985
Messages postés7Date d'inscriptiondimanche 15 août 2004StatutMembreDernière intervention 4 juillet 2009 6 juin 2009 à 20:09
Même en redéfinissant paintComponent cela donne rien , un JscollPan Blanc ... Par contre un deuxième problème que je viens de remarquer. Admettons que mon image fasse 1516x2286 en plus de ne pas pouvoir me deplacer tout en actualisant l'image, quand je me deplace avec les scrollbars dans le coin inferieur droit de l'image, si je clique pour pointer cette zone, mon marqueur (qui est un carré rouge), va se positionner en 910, 850 au lieu de 1516x2286. Si tu peu executer l'applet en mettant une image de grande taille tu constatera le probléme ... Merci de ton aide car là je suis un peu désemparé...
Vous n’avez pas trouvé la réponse que vous recherchez ?
BRUNO1985
Messages postés7Date d'inscriptiondimanche 15 août 2004StatutMembreDernière intervention 4 juillet 2009 7 juin 2009 à 16:31
Concernant le problème de positionnement des marqueurs cela est resolus il suffit simplement de prendre en compte la position relative du JScrollPan avec les méthode suivante :