Java.lang.IndexOutOfBoundsException

Résolu/Fermé
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 - 15 janv. 2008 à 00:04
 emoc11 - 18 mai 2011 à 08:55
Bonjour,
je ne comprends pas le "taux de raffraichisement" de mon appli et trop lente,
je m'explique, j'ai codé une petite appli qui me permet d'afficher des rectangles et des ovales sur un panel quand je clique dessus
les formes doivent alors se dessiner automatiquement sur mon panneau au lachez de mon clic souris
mais voila, le rafraichissement ne se fait pas automatiquement,
je dois déplacer la fenetre pour que mes formes s'affiche
que dois je faire pour avoir une appli un peu plus interractive?
Je débute en Java et je ne suis pas sur de mettre fait bien comprendre alors voila le code source du panneau surlequel on peut dessiner.
Merci a tous ceux qui pourront me répondre.

j'ai aussi une erreur java.lang.IndexOutOfBoundsException à la dernière ligne de code
this.tabFormes.get(i).dessine_moi(g);


/*
* Ardoise.java
*
* Created on 7 janvier 2008, 19:24
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package fab_paint;

import java.awt.event.MouseEvent;

/**
*
* @author Medion
*/
public class Ardoise extends javax.swing.JPanel implements java.awt.event.MouseListener{

private java.awt.Cursor c;
private int x, y, largeur, hauteur;
private Main m;

private int i_clicked=0, i_pressed=0, i_released=0,
i_entered=0, i_exited=0, i_dragged=0, i_moved=0;

private java.util.ArrayList<Forme> tabFormes;
private int posTabFormes;

/** Creates a new instance of Ardoise */
public Ardoise(Main m) {
this.m=m;
tabFormes = new java.util.ArrayList();
this.addMouseListener(this);
setBackground(java.awt.Color.WHITE);
setCursor(c = new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
}

public void mouseClicked(MouseEvent e) {
/*Invoked when the mouse button has been clicked (pressed and released) on a component. */
i_clicked +=1;
System.out.println("mouseClicked " + i_clicked + "e.getX() =" + e.getX() + "e.getY()" + e.getY());
}

public void mousePressed(MouseEvent e) {
i_pressed +=1;
System.out.println("mousePressed " + i_pressed + "e.getX() =" + e.getX() + "e.getY()" + e.getY());
this.x=e.getX();
this.y=e.getY();
}

public void calcul_hauteurLargeur(int x2, int y2){
if(x2>this.x){
this.tabFormes.get(this.posTabFormes).set_largeur(x2-this.x);
}
else{
this.tabFormes.get(this.posTabFormes).set_largeur(this.x-x2);
}
if(y2>this.y){
this.tabFormes.get(this.posTabFormes).set_hauteur(y2-this.y);
}
else{
this.tabFormes.get(this.posTabFormes).set_hauteur(this.y-y2);
}
}

public void mouseReleased(MouseEvent e) {
i_released +=1;
System.out.println("mouseReleased " + i_released + "e.getX() =" + e.getX() + "e.getY()" + e.getY());

this.tabFormes.add(new Forme(x,y,0,0));
this.posTabFormes = tabFormes.size()-1;

calcul_hauteurLargeur(e.getX(),e.getY());
this.largeur = this.tabFormes.get(this.posTabFormes).get_largeur();
this.hauteur = this.tabFormes.get(this.posTabFormes).get_hauteur();

if(m.get_pan().selec_rect()){
System.out.println("Rectangle r");
this.tabFormes.set(this.posTabFormes, new Rectangle(x,y,largeur,hauteur));
this.repaint();
}
else
if(m.get_pan().selec_ovale()){
System.out.println("Ovale o");
this.tabFormes.set(this.posTabFormes, new Ovale(x,y,largeur,hauteur));
this.repaint();
}
else{
System.out.println("Rectangle r");
this.tabFormes.set(this.posTabFormes, new Rectangle(x,y,largeur,hauteur));
this.repaint();
}
}

public void mouseEntered(MouseEvent e) {
/*Invoked when the mouse enters a component.*/
i_entered +=1;
System.out.println("mouseEntered " + i_entered);
}

public void mouseExited(MouseEvent e) {
i_exited +=1;
System.out.println("mouseExited " + i_exited);
}

public void paintComponent(java.awt.Graphics g){
super.paintComponent(g);
for(int i=0; i<=this.tabFormes.size();i++){
this.tabFormes.get(i).dessine_moi(g);
}
}

}

2 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 janv. 2008 à 00:26
Bonjour,

A première vu, ton erreur indique que tu es hors limite de ton tableau. Mets un point d'arrêt et passe ton code en mode débogeur pour voir ce que contient ton tableau.
Ensuite tu emplois des variables privées sans accesseurs ... et tu nommes une variable Main, c'est un mot réservé à Java. Je suppose que tu veux désigner la main qui dessine, nommes la alors maMain.

;o)

Polux
0
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 14
15 janv. 2008 à 13:47
c'est bon j'ai trouvé l'erreur c'était une débilité. Je devais juste faire attention à l'indice retourné par tabForme.size()
je suis dégouté d'avoir perdu tout ce temps pour ca.
Merci pour les conseils l'ami.
0
Bonjour, j'ai le même soucis et j'aimerais par consequent savoir comment tu as résolu ce problème de "tabForme.size()" ?

Il semblerait qu'en supprimant une ligne à l'aide de remove le tableau garde la même taille, ce qui provoque une erreur...

Merci d'avance.
0