Drag and Drop (inventar)

Christopher25

Bekanntes Mitglied
Hallo Liebe Java-Community.
Ich bin neu hier im Forum und freue mich, in euren Reihen balde
begrüßen zu dürfen.
Nun will ich nicht um den "Heißen Brei" rumreden, sondern direkt zu meinem Problem kommen.
Ich programmiere Zurzeit ein Java-Spiel, welches im RPG-Genre gestaltet ist
und auf der Basis von Texten läuft (also das gute alte Text-Adventure, für die, die sowas noch kennen!)
Mein Code bezüglich eines Drag and Drop Systems ist noch frisch und nichtmals anährend fertig^^
Jedoch komm ich dort nicht weiter, weil ich bei den Componenten scheitere.
Ich poste euch mal den Code.
Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import java.awt.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Inventar extends JPanel implements MouseListener,
MouseMotionListener {

    private int objectX = 186;
    private int objectY = 5;
    private int objectSize = 60;

    private Image image;

    private boolean objectDragging = false;
    private int objectDraggingOffsetX = 0;
    private int objectDraggingOffsetY = 0;

    public Inventar() {
        super();

        this.addMouseListener(this);
        this.addMouseMotionListener(this);
    }

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
        this.image = image;

        image = Toolkit.getDefaultToolkit().getImage("../RPG_Game/Inventar.jpg");
        repaint();
        
        if (objectDragging) {
            g.fillRect(objectX, objectY, objectSize, objectSize);
        } else {
            g.fillRect(objectX, objectY, objectSize, objectSize);
        }
        
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        objectDragging = false;
        repaint();
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        // Ist der Mausklick auf dem Objekt?
        if (mouseX >= objectX && mouseX <= objectX + objectSize
        && mouseY >= objectY && mouseY <= objectY + objectSize) {
            objectDragging = true;
            objectDraggingOffsetX = mouseX - objectX;
            objectDraggingOffsetY = mouseY - objectY;
            repaint();
        }
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
    }

    @Override
    public void mouseClicked(MouseEvent arg0) {
    }

    @Override
    public void mouseDragged(MouseEvent arg0) {
        if (objectDragging) {
            objectX = arg0.getX() - objectDraggingOffsetX;
            objectY = arg0.getY() - objectDraggingOffsetY;
            repaint();
        }
    }

    @Override
    public void mouseMoved(MouseEvent arg0) {
    }
}

Mein Problem ist einfach, dass ich mehrere Objekte wie
[g.fillRect(objectX, objectY, objectSize, objectSize);]
erstellen möchte, die ich einzelnt bewegen und setzen kann.
Wenn ich mehrere Objekte erzeuge bewegen sich alle gleichzeitig.
Wenn ich versuche in dem
Java:
@Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
        this.image = image;

        image = Toolkit.getDefaultToolkit().getImage("../RPG_Game/Inventar.jpg");
        repaint();
        
        if (objectDragging) {
            g.fillRect(objectX, objectY, objectSize, objectSize);
        } else {
            g.fillRect(objectX, objectY, objectSize, objectSize);
        }
        
    }
mehrere parameter vom typ Graphics g2.... etc zu erzeugen (und natürlich das Override wegmach)
erzeugt er keine Componenten mehr.
Wie kann ich also mehrere Componenten erzeugen, die sich einzelnt bewegen und setzen lassen?

Danke schonmal im worraus und entschuldige meine Unkenntnisse. Ich programmiere noch nicht sehr lange und habe es hauptsächlich 2 Jahre in meinem Fachabitur in It-Technik gelernt und möchte
gerne Anwendungsentwickler werden, wofür ich mich dieses Jahr bewerbe.

Hochachtungsvoll,

Christopher T.
 
Hey Leute. Warte seit einiger Zeit ja auf eine Antwort =(
Ich möchte schon keine von euch jetzt zugeschnittene Entwicklung sehen xD
Ich möchte nur meinen Fehlenden Ansatz wissen.
Ich weiß es nicht, ob ich was Falsch mach, etwas vergesse oder sonstiges...
Wäre echt lieb, wenn einer mir dazu schreibt Danke
 
Hmm scheint so, als wäre deine Klasse Inventar, das ganze Inventar mit allen Items drinnen?

Wie wäre es wenn du eine zweite Klasse InventarItem machst, die auch von JPanel erbt, und die sich nur darum kümmert sich selber (also dein fillRect) zu zeichnen?

Im Inventar hast du dann eine Liste von Items, die sich selber zeichnen sollen. Dann wird das ganze denke ich deutlich einfacher
 
Naja da gibt es mehrere Möglichkeiten, zB. könntest du jedes Objekt sich selbst um das Draggng kümmern lassen. Ich bin da aber leider auch nicht so bewandert.
 
Hm... so wie das mit dem TransferHandler klingt nicht schlecht.
Kann mir da einer vielleicht behilflich sein? Ich lese auf der Seite immer
etwas mit der JList, JTree etc. Aber das ja was ganz anderes als ein Object der JComponent
Klasse. :rtfm:
Hat dazu einer vielleicht ein Beispiel? Wie kann ich z.b. zwei Objekte einzelnt zeichnen lassen?
Ich habe doch nur die möglichkeit das ganze in der "protected void paintComponent(Graphics g){}"
abspielen zu lassen oder sehe ich das falsch? Gibt es andere Möglichkeiten?
Entschuldige meine Vielen Fragen. Ich bin in diesem Fach noch nicht sehr geläufig,
da ich "noch" ein Hobby-Programmierer bin und erst jetzt mich an solch einem großen Projekt wage.
Ich hoffe, dass mir jemand gute Beispiele zum Lernen geben kann und verbleibe mit einem Dankeschön😛opcorn:

Grüße,

Euer Christopher<3
 
Du meinst, was ich mit dem ganzen tun möchte?
Na es ist ein Inventar, wo man items anlegen und ablegen kann.
Wie man es von einem RPG Spiel ja kennst, ist es meist im Drag and Drop-System
gemacht, dass man dort slots hat wo man gegenstände reinziehn kann und damit
den gegenstand ausgerüstet hat.
So möchte ich dies auch umsetzen...
Oder war die Frage anders gemeint?
 
Der Code sieht nun folgendermaßen aus...

Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import java.awt.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Inventar extends JPanel implements MouseListener,
MouseMotionListener {
    private static int objectX = 186;        private static int objectX11 = 186;
    private static int objectY = 5;          private static int objectY11 = 153;
    private static int objectSize = 60; 

    private static int objectX2 = 269;       private static int objectX12 = 269;
    private static int objectY2 = 5;         private static int objectY12 = 153;

    private static int objectX3 = 354;       private static int objectX13 = 354;
    private static int objectY3 = 5;         private static int objectY13 = 153;

    private static int objectX4 = 438;       private static int objectX14 = 438;
    private static int objectY4 = 5;         private static int objectY14 = 153;

    private static int objectX5 = 523;       private static int objectX15 = 523;
    private static int objectY5 = 5;         private static int objectY15 = 153;

    private static int objectX6 = 186;       private static int objectX16 = 186;
    private static int objectY6 = 79;        private static int objectY16 = 229;

    private static int objectX7 = 269;       private static int objectX17 = 269;
    private static int objectY7 = 79;        private static int objectY17 = 229;

    private static int objectX8 = 354;       private static int objectX18 = 354;
    private static int objectY8 = 79;        private static int objectY18 = 229;

    private static int objectX9 = 438;       private static int objectX19 = 438;
    private static int objectY9 = 79;        private static int objectY19 = 229;

    private static int objectX10 = 523;       private static int objectX20 = 523;
    private static int objectY10 = 79;        private static int objectY20 = 229;

    private static int objectX21 = 186;       private static int objectX22 = 269;
    private static int objectY21 = 298;       private static int objectY22 = 298;

    private static int objectX23 = 354;       private static int objectX24 = 438;
    private static int objectY23 = 298;       private static int objectY24 = 298;

    private static int objectX25 = 523;
    private static int objectY25 = 298;

    /****************************SLOT**************************************/
    private static int slotX = 12;       
    private static int slotSize = 70; 

    private static int slotY = 22;
    private static int slotY2 = 114;
    private static int slotY3 = 210;      
    private static int slotY4 = 306;

    boolean isObject1Set =false;  boolean isObject11Set =false;
    boolean isObject2Set =false;  boolean isObject12Set =false;
    boolean isObject3Set =false;  boolean isObject13Set =false;
    boolean isObject4Set =false;  boolean isObject14Set =false;
    boolean isObject5Set =false;  boolean isObject15Set =false;
    boolean isObject6Set =false;  boolean isObject16Set =false;
    boolean isObject7Set =false;  boolean isObject17Set =false;
    boolean isObject8Set =false;  boolean isObject18Set =false;
    boolean isObject9Set =false;  boolean isObject19Set =false;
    boolean isObject10Set =false;  boolean isObject20Set =false;

    boolean isObject21Set =false;  boolean isObject24Set =false;
    boolean isObject22Set =false;  boolean isObject25Set =false;
    boolean isObject23Set =false;

    boolean isSlot1Set =false;  boolean isSlot3Set =false;
    boolean isSlot2Set =false;  boolean isSlot4Set =false;

    private Image background,image,image2,image3;
    TransferHandler handler;

    private boolean objectDragging = false;
    private int objectDraggingOffsetX = 0;
    private int objectDraggingOffsetY = 0;

    public Inventar() {
        super();

        this.addMouseListener(this);
        this.addMouseMotionListener(this);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.background = background;
        this.image = image;
        this.image2 = image2;
        this.image3 = image3;
        //this.image4 = image4;

        g.drawImage(background, 0, 0, getWidth(), getHeight(), null);

        background = Toolkit.getDefaultToolkit().getImage("../RPG_Game/Inventar.jpg");
        image = Toolkit.getDefaultToolkit().getImage("../RPG_Game/items/dolch.gif");
        image2 = Toolkit.getDefaultToolkit().getImage("../RPG_Game/items/schwert.gif");
        image3 = Toolkit.getDefaultToolkit().getImage("../RPG_Game/items/schwert2.gif");
        repaint();

        if (objectDragging) 
        {
            g.drawImage(image,objectX, objectY, null);
            g.drawImage(image2,objectX2, objectY2, null);
        } 
        else 
        {
            g.drawImage(image,objectX, objectY, null);
            g.drawImage(image2,objectX2, objectY2, null);

            isObject1Set = true;
            isObject2Set = true;
        }
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        // Ist der Mausklick auf dem Objekt während es im Inventar ist?
        if (mouseX >= objectX && mouseX <= objectX + objectSize
        && mouseY >= objectY && mouseY <= objectY + objectSize) 
        {
            if(isObject1Set==true)
            {
                objectDragging = true;
                objectDraggingOffsetX = mouseX - objectX;
                objectDraggingOffsetY = mouseY - objectY;
                repaint();
            }
        }

        if (mouseX >= objectX2 && mouseX <= objectX2 + objectSize
        && mouseY >= objectY2 && mouseY <= objectY2 + objectSize) 
        {
            if(isObject2Set==true)
            {
                objectDragging = true;
                objectDraggingOffsetX = mouseX - objectX2;
                objectDraggingOffsetY = mouseY - objectY2;
                repaint();
            }
        }
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        if (mouseX >= slotX && mouseX <= slotX + objectSize
        && mouseY >= slotY && mouseY <= slotY + objectSize)
        {
            if(isSlot1Set==false)
            {
                objectX = slotX;
                objectY = slotY;
                repaint();
                isSlot1Set=true;
                isObject1Set=false;
                objectDragging = false;
            }
            else
            {
                isSlot1Set=false;
                isObject1Set=true;
                objectDraggingOffsetX=objectX;
                objectDraggingOffsetY=objectY;
                repaint();
            }
        }
        else
        {
            if(isObject1Set==false)
            {
                objectDragging = true;
                objectX = 186;
                objectY = 5;
                repaint();
            }
            else if(isObject2Set==false)
            {
                objectDragging = true;
                objectX = 269;
                objectY = 5;
                repaint();
            }
        }

        if (mouseX >= slotX && mouseX <= slotX + objectSize
        && mouseY >= slotY2 && mouseY <= slotY2 + objectSize)
        {
            if(isSlot2Set==false)
            {
                objectX2 = slotX;
                objectY2 = slotY2;
                repaint();
                isSlot2Set=true;
                isObject2Set=false;
                objectDragging = false;
            }
            else
            {
                isSlot2Set=false;
                isObject2Set=true;
                objectDraggingOffsetX=objectX2;
                objectDraggingOffsetY=objectY2;
                repaint();
            }
        }
        else
        {
            if(isObject1Set==false)
            {
                objectDragging = true;
                objectX = 186;
                objectY = 5;
                repaint();
            }
            else if(isObject2Set==false)
            {
                objectDragging = true;
                objectX = 269;
                objectY = 5;
                repaint();
            }
        }
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
    }

    @Override
    public void mouseClicked(MouseEvent arg0) {
    }

    @Override
    public void mouseDragged(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        if (objectDragging) {
            if (mouseX >= objectX && mouseX <= objectX + objectSize
            && mouseY >= objectY && mouseY <= objectY + objectSize) 
            {
                objectX = arg0.getX() - objectDraggingOffsetX;
                objectY = arg0.getY() - objectDraggingOffsetY;
                repaint();
            }
            else if (mouseX >= objectX2 && mouseX <= objectX2 + objectSize
            && mouseY >= objectY2 && mouseY <= objectY2 + objectSize) 
            {
                objectX2 = arg0.getX() - objectDraggingOffsetX;
                objectY2 = arg0.getY() - objectDraggingOffsetY;
                repaint();
            }
        }
    }

    @Override
    public void mouseMoved(MouseEvent arg0) {  
    }
}

Jedoch hab ich immernoch probleme, die einzelnen Objekte richtig zu handhaben.
Sieht dort einer mein Problem? Kann jemand mir vielleicht weiter helfen, der meinen Code nachvollziehen kann?
 
1. Hast du schonmal was von Arrays gehört? Das sind Grundlagen, die man beherrschen sollte bevor man sich an ein Spiel wagt.

2. In der Paint Methode Bilder zu laden ist nicht gut. Das kostet eine Menge Zeit, weil die Paint methode ja immer wieder aufgerufen wird und das gleiche Bild immer wieder von der Festplatte geladen wird. Bilder einmal laden und in einer Variable speichern. In der Paint nur zeichnen.
 
Hi ja klar kenn ich arrays xD ich arbeite aber selten mit denen und komm deshalb nie in den Sinn es mit ihnen zu versuchen.
Mir war es immer zu lästig die ganzen arrays immer auseinander zu dröseln...
Ich werd es aber umstrukturieren hast du recht.
Okey, ich werde das mit den bildern laden in eine seperate Methode stecken.

Danke schonmal für deine Hilfe...
 
Hey,

also dein Code sieht etwas sehr wüst aus. Ich hab mal ein wenig rumprobiert, und mich hier von inspirieren lassen: swing - java move components with mouse - Stack Overflow

Dort wird auch empfohlen vll. die GlassPane zu verwenden, wäre natürlich auch eine Idee.

Hier mal die Klasse Item:

Java:
package drag;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;

public class Item extends JComponent {
	private static int imageWidth = 60, imageHeight = 60;
	private Image image;
	private int draggedAtX, draggedAtY;
	
	public Item() {
	    setSize(imageWidth, imageHeight);
		Image image = Toolkit.getDefaultToolkit().getImage(Item.class.getResource("A.png"));
	    this.image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_DEFAULT);
	    
	    final MouseAdapter adapter = new MouseAdapter() {
	    	@Override
	    	public void mouseDragged(MouseEvent e) {
	    		setLocation(e.getX() - draggedAtX + getLocation().x,
	                    e.getY() - draggedAtY + getLocation().y);
	    	}

	    	@Override
	    	public void mousePressed(MouseEvent e) {
	            draggedAtX = e.getX();
	            draggedAtY = e.getY();
	    	}
	    };
	    
	    addMouseMotionListener(adapter);
	    addMouseListener(adapter);
	}

	@Override
	public void paintComponent(Graphics g) {
	    Graphics2D g2 = (Graphics2D) g;
	    // x, y are relative to THIS Component
	    g2.drawImage(image, 0, 0, this);
	}
}

Im Anhang mal ein komplettes Eclipse Projekt.
 

Anhänge

Danke dass du dir die Arbeit genommen hast =)
Aber sorry, ich weiß nicht genau, was ich damit anfangen sollte.
Soweit ich das jetzt sehe ist, dass der Code einfach nur gespalten wurde richtig?
So müsste ich daraus zwei klassen machen richtig?
Es gibt schon eine Klasse namens Game_Equipments
Java:
public class Game_Equipments
{
    public static int W_ID;
    public static int stückzahl1=0;
    public static int stückzahl2=0;
    protected static int DMG = 0;

    int getID_Faust()
    {
        W_ID =0;
        
        return W_ID;
    }
    
    int getID_Dolch()
    {
        W_ID = 1;

        return W_ID;
    }

    int getID_RostigeKlinge()
    {
        W_ID = 2;

        return W_ID;
    }
    
    
    int getDMG()
    {
        if(W_ID==0)
        {
            DMG = 0;
        }
        if(W_ID==1)
        {
            DMG = 15;
        }
        if(W_ID==2)
        {
            DMG = 30;
        }
        return DMG;
    }
}

In der die ganzen Items mit Ihren werten stehen. Jetzt nochmal eine Klasse zu machen wäre sinnfrei^^
Natürlich ist die klasse auch nicht final xD stecke ja noch in den Anfangsschuhen...
Ich weiß jetzt nicht ganz, was ich jetzt von alledem halten soll. Wenn ihr meine Programmierung unsauber
findet, tut mir leid^^ ich programmiere nur so, was ich in 2 Jahren Schulunterricht mit 2stunden die Woche, gelernt habe.
Mein problem ist es einfach, mehrere Objekte zu steuern.
Es kommt oft vor, da ich ja mit den koordinaten arbeite (wüsste nicht wie sonst), dass sich die objekte ja überschneiden.
Da ich keine mehreren Graphics g erzeugen kann, da sonst irgendwie garnichts mehr gezeichnet wird, kann ich nur mit g
arbeiten, welches sich anscheinend als Problem herausstellt, da er das ganze dann, wenn die koordinaten sich schneiden,
z.b. dragged man zwei items übereinander lassen die sich nimmer aufnehmen und so weiter xD
Ich hab mir mal angesehen dass es ein DropTarget gibt, jedoch verstehe ich nicht ganz, wie ich das in meinem Code
einbetten soll.
Ich Poste euch nochmal den Stand der Dinge, da ich ein wenig mit dem Platzieren der Items herumgespielt hab,
wenn kein Slot gelegt wird...
Ich habe mich jetzt noch nicht mit dem Array beschäftigt da ich das als nicht zu wichtig finde, weil es ist ja nur eine
umformulierung und tuen tuts es auch mit normalen variablen (wird sich dann ändern, wenn alles andere funktioniert).

Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import java.awt.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Inventar extends JPanel implements MouseListener,
MouseMotionListener {
    private static int objectX = 186;         private static int objectX11 = 186;
    private static int objectY = 5;           private static int objectY11 = 153;
    private static int objectSize = 60; 

    private static int objectX2 = 269;        private static int objectX12 = 269;
    private static int objectY2 = 5;          private static int objectY12 = 153;

    private static int objectX3 = 354;        private static int objectX13 = 354;
    private static int objectY3 = 5;          private static int objectY13 = 153;

    private static int objectX4 = 438;        private static int objectX14 = 438;
    private static int objectY4 = 5;          private static int objectY14 = 153;

    private static int objectX5 = 523;        private static int objectX15 = 523;
    private static int objectY5 = 5;          private static int objectY15 = 153;

    private static int objectX6 = 186;        private static int objectX16 = 186;
    private static int objectY6 = 79;         private static int objectY16 = 229;

    private static int objectX7 = 269;        private static int objectX17 = 269;
    private static int objectY7 = 79;         private static int objectY17 = 229;

    private static int objectX8 = 354;        private static int objectX18 = 354;
    private static int objectY8 = 79;         private static int objectY18 = 229;

    private static int objectX9 = 438;        private static int objectX19 = 438;
    private static int objectY9 = 79;         private static int objectY19 = 229;

    private static int objectX10 = 523;       private static int objectX20 = 523;
    private static int objectY10 = 79;        private static int objectY20 = 229;

    private static int objectX21 = 186;       private static int objectX22 = 269;
    private static int objectY21 = 298;       private static int objectY22 = 298;

    private static int objectX23 = 354;       private static int objectX24 = 438;
    private static int objectY23 = 298;       private static int objectY24 = 298;

    private static int objectX25 = 523;
    private static int objectY25 = 298;

    /****************************SLOT**************************************/
    private static int slotX = 12;       
    private static int slotSize = 70; 

    private static int slotY = 22;
    private static int slotY2 = 114;
    private static int slotY3 = 210;      
    private static int slotY4 = 306;

    /******************Ist ein Slot besetzt ja oder nein?******************/
    static boolean isObject1Set =false;   static boolean isObject11Set =false;
    static boolean isObject2Set =false;   static boolean isObject12Set =false;
    static boolean isObject3Set =false;   static boolean isObject13Set =false;
    static boolean isObject4Set =false;   static boolean isObject14Set =false;
    static boolean isObject5Set =false;   static boolean isObject15Set =false;
    static boolean isObject6Set =false;   static boolean isObject16Set =false;
    static boolean isObject7Set =false;   static boolean isObject17Set =false;
    static boolean isObject8Set =false;   static boolean isObject18Set =false;
    static boolean isObject9Set =false;   static boolean isObject19Set =false;
    static boolean isObject10Set =false;  static boolean isObject20Set =false;
    static boolean isObject21Set =false;  static boolean isObject24Set =false;
    static boolean isObject22Set =false;  static boolean isObject25Set =false;
    static boolean isObject23Set =false;

    static boolean isSlot1Set =false;     static boolean isSlot3Set =false;
    static boolean isSlot2Set =false;     static boolean isSlot4Set =false;

    private Image background,image,image2,image3;

    private static boolean objectDragging = false;
    private static int objectDraggingOffsetX = 0;
    private static int objectDraggingOffsetY = 0;

    Game_GUI gui = new Game_GUI();

    static int item =0;    /**Welches Item wurde aufgenommen**/
    static int item_id=0;

    public Inventar() {
        super();
        background = Toolkit.getDefaultToolkit().getImage("../RPG_Game/Inventar.jpg");
        image = Toolkit.getDefaultToolkit().getImage("../RPG_Game/items/dolch.gif");
        image2 = Toolkit.getDefaultToolkit().getImage("../RPG_Game/items/schwert.gif");
        image3 = Toolkit.getDefaultToolkit().getImage("../RPG_Game/items/schwert2.gif");

        this.background = background;
        this.image = image;
        this.image2 = image2;
        this.image3 = image3;
        //this.image4 = image4;

        this.addMouseListener(this);
        this.addMouseMotionListener(this);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(background, 0, 0, getWidth(), getHeight(), null);
        repaint();

        if (objectDragging) 
        {
            g.drawImage(image,objectX, objectY, null);
            g.drawImage(image2,objectX2, objectY2, null);
        } 
        else 
        {
            g.drawImage(image,objectX, objectY, null);
            g.drawImage(image2,objectX2, objectY2, null);

            isObject1Set = true;
            isObject2Set = true;
        }
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        // Ist der Mausklick auf dem Objekt während es im Inventar ist?
        if (mouseX >= objectX && mouseX <= objectX + objectSize
        && mouseY >= objectY && mouseY <= objectY + objectSize) 
        {
            item=1;
            objectDragging = true;
            objectDraggingOffsetX = mouseX - objectX;
            objectDraggingOffsetY = mouseY - objectY;
            repaint();
        }

        if (mouseX >= objectX2 && mouseX <= objectX2 + objectSize
        && mouseY >= objectY2 && mouseY <= objectY2 + objectSize) 
        {
            item=2;
            objectDragging = true;
            objectDraggingOffsetX = mouseX - objectX2;
            objectDraggingOffsetY = mouseY - objectY2;
            repaint();
        }
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        if (mouseX >= slotX && mouseX <= slotX + objectSize
        && mouseY >= slotY && mouseY <= slotY + objectSize)
        {
            if(isSlot1Set==false)
            {
                if(item==1)
                {
                    objectX = slotX;
                    objectY = slotY;
                    repaint();
                    gui.playSlotSet();
                    isSlot1Set=true;
                    isObject1Set=false;
                    objectDragging = false;
                }
            }  
            item=0;
        }
        if (mouseX >= slotX && mouseX <= slotX + objectSize
        && mouseY >= slotY && mouseY <= slotY + objectSize)
        {
            if(isSlot1Set==false)
            {
                if(item==2)
                {
                    objectX2 = slotX;
                    objectY2 = slotY;
                    repaint();
                    gui.playSlotSet();
                    isSlot1Set=true;
                    isObject2Set=false;
                    objectDragging = false;
                }
            }
            item=0;
        }
        else
        {
            if(item==1)
            {
                if (mouseX >= objectX && mouseX <= objectX + objectSize
                && mouseY >= objectY && mouseY <= objectY + objectSize)
                {
                    if(isObject1Set==false)
                    {
                        isSlot1Set=false;
                        isObject1Set=true;
                        item_id=1;

                        objectX = 186;
                        objectY = 5;
                        repaint();
                    }
                }
                if (mouseX >= objectX2 && mouseX <= objectX2 + objectSize
                && mouseY >= objectY2 && mouseY <= objectY2 + objectSize)
                {
                    if(isObject2Set==false)
                    {
                        isSlot1Set=false;
                        isObject2Set=true;

                        objectX = 269;
                        objectY = 5;
                        repaint();
                    }
                }
                if (mouseX >= objectX3 && mouseX <= objectX3 + objectSize
                && mouseY >= objectY3 && mouseY <= objectY3 + objectSize)
                {
                    if(isObject3Set==false)
                    {
                        isSlot1Set=false;
                        isObject3Set=true;

                        objectX = 354;
                        objectY = 5;
                        repaint();
                    }
                }
                objectDragging = true;
                item=0;
            }
            else if(item==2)
            {    
                if (mouseX >= objectX && mouseX <= objectX + objectSize
                && mouseY >= objectY && mouseY <= objectY + objectSize)
                {
                    if(isObject1Set==false)
                    {
                        isSlot1Set=false;
                        isObject1Set=true;

                        objectX = 186;
                        objectY = 5;
                        repaint();
                    }
                }
                if (mouseX >= objectX2 && mouseX <= objectX2 + objectSize
                && mouseY >= objectY2 && mouseY <= objectY2 + objectSize)
                {
                    if(isObject2Set==false)
                    {
                        isSlot1Set=false;
                        isObject2Set=true;

                        objectX = 269;
                        objectY = 5;
                        repaint();
                    }
                }
                if (mouseX >= objectX3 && mouseX <= objectX3 + objectSize
                && mouseY >= objectY3 && mouseY <= objectY3 + objectSize)
                {
                    if(isObject3Set==false)
                    {
                        isSlot1Set=false;
                        isObject3Set=true;

                        objectX = 354;
                        objectY = 5;
                        repaint();
                    }
                }
                objectDragging = true;   
                item=0;
            }
        }
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
    }

    @Override
    public void mouseClicked(MouseEvent arg0) {
    }

    @Override
    public void mouseDragged(MouseEvent arg0) {
        int mouseX = arg0.getX();
        int mouseY = arg0.getY();

        if (objectDragging) {
            if (mouseX >= objectX && mouseX <= objectX + objectSize
            && mouseY >= objectY && mouseY <= objectY + objectSize) 
            {
                if(item==1)
                {
                    if(isObject1Set==true)
                    {
                        isObject1Set=false;
                    }
                    if(isObject2Set==true)
                    {
                        isObject2Set=false;
                    }
                    if(isObject2Set==true)
                    {
                        isObject2Set=false;
                    }
                    objectX = arg0.getX() - objectDraggingOffsetX;
                    objectY = arg0.getY() - objectDraggingOffsetY;
                    repaint();
                }
            }
            else if (mouseX >= objectX2 && mouseX <= objectX2 + objectSize
            && mouseY >= objectY2 && mouseY <= objectY2 + objectSize) 
            {
                if(item==2)
                {
                    if(isObject1Set==true)
                    {
                        isObject1Set=false;
                    }
                    if(isObject2Set==true)
                    {
                        isObject2Set=false;
                    }
                    if(isObject2Set==true)
                    {
                        isObject2Set=false;
                    }
                    objectX2 = arg0.getX() - objectDraggingOffsetX;
                    objectY2 = arg0.getY() - objectDraggingOffsetY;
                    repaint();
                }
            }
        }
    }

    @Override
    public void mouseMoved(MouseEvent arg0) {  
    }
}
 
Beschäftige dich lieber mal mit dem Array, solange in deinem Code 5 seiten Variablendefinitionen stehen, die in 5 Zeilen Arraycode erledigt werden könnten wird sich kaum jemand die mühe machen deinen Code zu entziffern.
 

Zurück
Oben