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:
Panel:
Der Error:
Ich weiß einfach nicht, was ich falsch gemacht habe und bin deshalb für jede Hilfe dankbar!
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; }
}
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; }
}
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!