Datentypen Objekt lässt sich nicht zu arraylist hinzufügen

CptK

Bekanntes Mitglied
Servus, ich habe da ein kleines Problem:
Ich habe da eine Klasse ImageLoader, in der Bilder erzeugt werden und mit x und y Koordinaten usw ausgestattet werden. In der Klasse sollen diese dann gezeichnet werden, was auch ganz gut funktioniert, bis auf 5 Patronen, die unten links in der Ecke angezeigt werden sollen (Stelle ist im Code markiert):
ImageLoader:
Java:
package Actions;

import java.awt.Font;
import java.awt.image.BufferedImage;

import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;

import Gui.Panel;

public class ImageLoader {   
    private int x,y,maxy,width,height;
    private String path, imagename;   
    private boolean huhnisDown = true;   
    private BufferedImage image;
           
           
    public ImageLoader(int x,int y, int maxy, String path, int width, int height, String name) {
        this.x = x;
        this.y = y;
        this.maxy = maxy;
        this.path = path;
        this.width = width;
        this.height = height;
        imagename = name;
       
        try {
            image = ImageIO.read(new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }   
       
    }
   
    public void setX(int x) {    this.x = x;    }
    public int getX()        {    return x;    }
   
    public void setY(int y)    {    this.y = y;    }
    public int getY()        {     return y;     }
   
    public int getMaxY()    {    return maxy;}
   
    public void setWidth(int w)    { this.width = w;    }
    public int getWidth()        { return width;        }
   
    public void setHeight(int h) { this.height = h;    }
    public int getHeight()         { return height;    }
   
    public void setImage(String path) { try { image = ImageIO.read(new File(path)); } catch (IOException e) { e.printStackTrace(); } }    
    public BufferedImage getImage()    {    return image;    }
   
    public String getname()    { return imagename;    }
   
   
   

}
Panel:
Java:
package Gui;

import java.awt.*;
import java.util.ArrayList;

import javax.swing.*;

import Actions.ImageLoader;

public class Panel extends JPanel {
   
    private static final long serialVersionUID = 1L;
    private int move = 15;
    private boolean ingame = true, laden = false;
   
    private int schussNr = 4, punkte = 0;
   
    public ArrayList<ImageLoader> il = new ArrayList<ImageLoader>();
   
    private JLabel points;
   
    public Panel() {
       
        setSize(1000,743);
        setLayout(null);
        setVisible(true);
        repaint();
       
        points = new JLabel("Punkte: " + punkte);
        points.setBounds(790,10,200,40);
        points.setFont(new Font("Arial",Font.BOLD,25));
        points.setVisible(true);
        add(points);
       
    }
   
    public void paintComponent(Graphics g) {
       
        il.add(0, new ImageLoader(-1000, 0, 0, "rsc/MHBGE3.png", 3000, 743, "bgEbene3"));
        g.drawImage(il.get(0).getImage(), il.get(0).getX(), il.get(0).getY(), il.get(0).getWidth(), il.get(0).getHeight(), null);
       
        //Hühner Ebene2

        il.add(1, new ImageLoader(-1000, 0, 0, "rsc/MHBGE2.png", 3000, 743, "bgEbene2"));
        g.drawImage(il.get(1).getImage(), il.get(1).getX(), il.get(1).getY(), il.get(1).getWidth(), il.get(1).getHeight(), null);
       
        il.add(2, new ImageLoader(-1000, 0, 0, "rsc/MHBGE1.png", 3000, 743, "bgEbene1"));
        g.drawImage(il.get(2).getImage(), il.get(2).getX(), il.get(2).getY(), il.get(2).getWidth(), il.get(2).getHeight(), null);   
       
        il.add(3, new ImageLoader(-650, -45, 0, "rsc/Mühle.png", 600, 600, "mühlrad"));
        g.drawImage(il.get(3).getImage(), il.get(3).getX(), il.get(3).getY(), il.get(3).getWidth(), il.get(3).getHeight(), null);
       
        for(int i = 4; i < 10; i++) {
            int x = -900,y = 550,maxy = 480;
            if(i == 5) { x = -600; y = 490; maxy = 420; }
            else if(i == 6) { x = -100; y = 470; maxy = 400; }
            else if(i == 7)    { x = 400; y = 470; maxy = 300; }
            else if(i == 8) { x = 1000; y = 450; maxy = 370; }
            else if(i == 9) { x = 1600; y = 390; maxy = 310; }
            il.add(i, new ImageLoader(x, y, maxy, "rsc/Moorhuhn1.png", 40, 60, "huhnEbene2"));
            g.drawImage(il.get(i).getImage(), il.get(i).getX(), il.get(i).getY(), il.get(i).getWidth(), il.get(i).getHeight(), null);
            g.setColor(Color.RED);
            g.drawLine(il.get(i).getX(), il.get(i).getY(), il.get(i).getX()+40, il.get(i).getY());
            g.drawLine(il.get(i).getX(), il.get(i).getY()+60, il.get(i).getX()+40, il.get(i).getY()+60);
            g.drawLine(il.get(i).getX(), il.get(i).getY(), il.get(i).getX(), il.get(i).getY()+60);
            g.drawLine(il.get(i).getX()+40, il.get(i).getY(), il.get(i).getX()+40, il.get(i).getY()+60);
        }
       
//Hier ist das Problem: es wird nur die erste Patrone gemalt....
        for(int i = 10; i < 15; i++) {
            int xs = 10;
            il.set(i, new ImageLoader(xs, 650, 650, "rsc/shotpat.png", 25, 50, "patrone"));
            g.drawImage(il.get(i).getImage(), il.get(i).getX(), il.get(i).getY(), il.get(i).getWidth(), il.get(i).getHeight(), null);
            xs += 35;
        }   
       
        if(laden == true) {
            g.setColor(Color.RED);
            g.setFont(new Font("Impact", Font.BOLD, 30));
            g.drawString("Keine Munition", 380, 360);
        }
       
    }
   
   
    public void setIngame(boolean i) { ingame = i; }
    public boolean getIngame() { return ingame; }
   
    public void setLaden(boolean i) { laden = i; }
    public boolean getLaden() { return laden; }
   
    public int getMoveInt() { return move; }
   
    public int getSchussNr() { return schussNr; }
    public void setSchussNr(int i) { schussNr = i; }
   
    public int getpunkte() { return punkte; }
    public void setPunkte(int i) { punkte += i; }

    public void moveLeft() {
        for(int i = 0; i < 10; i++) {
            il.get(i).setX(il.get(i).getX() + getMoveInt());
        }
        repaint();
    }
   
    public void moveRight() {
        for(int i = 0; i < 10; i++) {
            il.get(i).setX(il.get(i).getX() - getMoveInt());
        }
        repaint();
    }
   
    public void pointsSetText(int p) { points.setText("Punkte: " + p); }
    public int getPoints() { return punkte; }
    public void setPoints(int p) { punkte = p; }
   
}
Der Error:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index 10 out-of-bounds for length 10
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
    at java.base/java.util.Objects.checkIndex(Unknown Source)
    at java.base/java.util.ArrayList.set(Unknown Source)
    at Gui.Panel.paintComponent(Panel.java:71)
    at java.desktop/javax.swing.JComponent.paint(Unknown Source)
    at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
    at java.desktop/javax.swing.JComponent.paint(Unknown Source)
    at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
    at java.desktop/javax.swing.JComponent.paint(Unknown Source)
    at java.desktop/javax.swing.JLayeredPane.paint(Unknown Source)
    at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(Unknown Source)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
    at java.desktop/javax.swing.RepaintManager.paint(Unknown Source)
    at java.desktop/javax.swing.JComponent.paint(Unknown Source)
    at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
    at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
    at java.desktop/sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
    at java.desktop/java.awt.Container.paint(Unknown Source)
    at java.desktop/java.awt.Window.paint(Unknown Source)
    at java.desktop/javax.swing.RepaintManager$4.run(Unknown Source)
    at java.desktop/javax.swing.RepaintManager$4.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
    at java.desktop/javax.swing.RepaintManager.access$1200(Unknown Source)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.desktop/java.awt.EventQueue.access$600(Unknown Source)
    at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
    at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

Ich weiß einfach nicht, was ich falsch gemacht habe und bin deshalb für jede Hilfe dankbar!
 

Neue Themen


Zurück
Oben