Interface Bild über Methode ändern funktioniert nicht

CptK

Bekanntes Mitglied
Servus, ich hätte da ein kleines Problem:
Ich habe eine Klasse, ImageLoader, in deren Constructor ein Bild mit x,y,usw erzeugt wird. Diese Klasse wird von der Klasse Panel aufgerufen. Dort werden die Objekte erstellt und in einer ArrayList gespeichert. Außerdem gibt es in der Klasse ImageLoader verschiedene Methoden, die die Werte verändern und in der Klasse Panel gibt es Methoden die den Bildschirm nach links und rechts bewegen sollen(aufgerufen im KeyListner). Das Problem ist jetzt, dass sich weder die Werte ändern, noch die Methode mit dem Move funktioniert, wenn ich das ganze im Key- bzw MouseHandler aufrufe....

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 i) {    x = i;    }
    public int getX()        {    return x;    }
 
    public void setY(int i)    {    y = i;    }
    public int getY()        {     return y;     }
 
    public int getMaxY()    {    return maxy;}
 
    public void setWidth(int i)    { width = i;    }
    public int getWidth()        { return width;        }
 
    public void setHeight(int i) { height = i;    }
    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:
Code:
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);
        }
     
        int xs[] = {10,45,80,115,150};
        for(int i = 10; i < 15; i++) {     
            il.add(i, new ImageLoader(xs[i-10], 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);
        } 
     
        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; }
 
}

KeyHandler:
Java:
package Actions;

import java.awt.event.*;

import Gui.Panel;

public class KeyHandler implements KeyListener {
 
    private Panel p;
 
    public KeyHandler(Panel panel) {
        p = panel;
    }

    @Override
    public void keyPressed(KeyEvent e) {
     
        if(e.getKeyCode() == KeyEvent.VK_LEFT) {
            if(p.il.get(0).getX() <= 0){
                p.moveLeft();  // Das geht nicht
                p.repaint();
            }
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if(p.il.get(0).getX() >= -2000){
                p.moveRight();   //Das geht nicht
            }
        }
     
    }

    @Override
    public void keyReleased(KeyEvent e) {
 
    }

    @Override
    public void keyTyped(KeyEvent e) {
 
    }

}

MouseHandler:
Java:
package Actions;

import java.awt.Color;
import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

import Animations.HuhnTimer;
import Gui.Panel;

public class MouseHandler implements MouseListener {
 
    private Panel p;
    private ImageLoader il;
    private int mx, my;
 
    public MouseHandler(Panel panel) {
        p = panel;
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {     
        mx = e.getX() + 6;
        my = e.getY() - 15;
     
        if(SwingUtilities.isLeftMouseButton(e)) {
            if(p.getSchussNr() >= 0) {
                p.il.get(p.getSchussNr()+10).setImage("rsc/shotpatused.png");   //Das hier geht nicht
                System.out.println(p.il.get(0).getImage());
                p.setSchussNr(p.getSchussNr() - 1); 
                    for(int i = 4; i < 10; i++) {            
                        if(mx > p.il.get(i).getX() && mx < p.il.get(i).getX()+40 && my > p.il.get(i).getY() && my <p.il.get(i).getY()+60) {                         
                            p.setPoints(p.getPoints()+10);
                            p.pointsSetText(p.getPoints());
                        }
                    }
            } else {
                p.setLaden(true);                         
            }
        } else if(SwingUtilities.isRightMouseButton(e)) {
            p.setLaden(false);
            p.setSchussNr(4);
            for(int i = 10; i < 15; i++) {
                p.il.get(i).setImage("rsc/shotpat.png");
            }
        }
        p.repaint();
        //new Sound("sounds/test.wav");
     
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
     
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
     
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
     
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
     
    }

 

}

Ich habe leider keinen Plan, woran das liegt, wäre deshalb also für jede Hilfe dankbar!
Es tut mir auch leid, dass das so viel Code ist, ich weiß aber nicht genau was davon wichtig ist und habe deshalb lieber mal alles gesendet.
 

CptK

Bekanntes Mitglied
in der main
Java:
package Gui;

import java.awt.Font;
import java.awt.Point;
import java.awt.Toolkit;

import javax.swing.*;
import Actions.*;
import Animations.GameTimer;
import Animations.HuhnTimer;

public class Main extends JFrame {
   
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        new Main();       
    }
   
    public Main() {
       
        Panel panel = new Panel();   
       
        setSize(1000,743);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);
        setLocationRelativeTo(null);
        setResizable(false);
        requestFocus();
        addMouseListener(new MouseHandler(panel));
        addMouseMotionListener(new MouseMotionHandler(panel));
        addKeyListener(new KeyHandler(panel));
        add(panel);       
       
        try {
         ImageIcon icon = new ImageIcon("rsc/zielen.png");
         setCursor(Toolkit.getDefaultToolkit().createCustomCursor(icon.getImage(),new Point(0,0),"custom cursor"));
        }    catch(Exception e)    {System.out.println("klappt net");    }
       
        new GameTimer(panel);
       
        setVisible(true);
       
       
    }

}
 

Robat

Top Contributor
Nicht genau angeschaut aber ein Problem sollte auf jeden Fall sein, dass du die Bilder immer wieder neu zu deiner Liste hinzufügst. Das hinzufügen zu der ArrayList sollte nicht in der paintComponent-Methode erfolgen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Bild über JButton legen Java Basics - Anfänger-Themen 3
L Bild versenden über Client/Server Java Basics - Anfänger-Themen 10
J Bild zu JPanel hinzufügen nach Aufruf über ActionListener? Java Basics - Anfänger-Themen 3
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
J Bild einfügen Java Basics - Anfänger-Themen 3
T ASCII Art von Bild erstellen. Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben