Java.lang.IndexOutOfBoundsException
Résolu
fabien.joubert
Messages postés
35
Date d'inscription
Statut
Membre
Dernière intervention
-
emoc11 -
emoc11 -
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);
}
}
}
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
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
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