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.
 

Christopher25

Bekanntes Mitglied
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
 

mjdv

Bekanntes Mitglied
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
 

mjdv

Bekanntes Mitglied
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.
 

Christopher25

Bekanntes Mitglied
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:popcorn:

Grüße,

Euer Christopher<3
 

Christopher25

Bekanntes Mitglied
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?
 

Christopher25

Bekanntes Mitglied
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?
 

bERt0r

Top Contributor
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.
 

Christopher25

Bekanntes Mitglied
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...
 

mjdv

Bekanntes Mitglied
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

  • drag.zip
    9,4 KB · Aufrufe: 1

Christopher25

Bekanntes Mitglied
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) {  
    }
}
 

bERt0r

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
AmsananKING ListView Drag And Drop AWT, Swing, JavaFX & SWT 0
AmsananKING Drag And Drop Filenames Inside A Listview AWT, Swing, JavaFX & SWT 1
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
F Drag und Drop AWT, Swing, JavaFX & SWT 0
L JavaFX JavaFX Chart Drag and Drop AWT, Swing, JavaFX & SWT 3
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
U Drag and Drop mit imageview AWT, Swing, JavaFX & SWT 0
U Drag and Drop imageviews AWT, Swing, JavaFX & SWT 8
D SteelSeries in Netbeans als Drag-and-Drop einbinden AWT, Swing, JavaFX & SWT 0
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
N Swing JTable und Drag und Drop AWT, Swing, JavaFX & SWT 2
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
HaukeG Swing Drag & Drop in verschiedenen Varianten AWT, Swing, JavaFX & SWT 4
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
R Drag 'n Drop AWT, Swing, JavaFX & SWT 3
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
C Swing Drag and Drop mit Objekten in einem Fenster. AWT, Swing, JavaFX & SWT 9
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
B Drag and Drop AWT, Swing, JavaFX & SWT 6
K Drag and Drop Workbench AWT, Swing, JavaFX & SWT 2
P SWT Eclipse Draw2D Drag and Drop (ruckelt) AWT, Swing, JavaFX & SWT 4
F SWT Drag and Drop im TreeViewer AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
A TransferHandler & Drag n' Drop AWT, Swing, JavaFX & SWT 2
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
E Swing Beim Drag & Drop, Drag verbieten?! AWT, Swing, JavaFX & SWT 2
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Drag and Drop JPanel auf JPanel nach drop erneut verschieben? AWT, Swing, JavaFX & SWT 3
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
M Drag and Drop: Quellfenster AWT, Swing, JavaFX & SWT 2
M Buttons per Drag & Drop im GridBagLayout verschieben AWT, Swing, JavaFX & SWT 6
M Swing JList > Drag & Drop AWT, Swing, JavaFX & SWT 2
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
G JTable drag and drop AWT, Swing, JavaFX & SWT 4
H Drag&Drop mit GWT AWT, Swing, JavaFX & SWT 8
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
V SWT TreeViewer Drag'n'Drop LocalSelectionTransfer AWT, Swing, JavaFX & SWT 10
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
S Drag'n'Drop AWT, Swing, JavaFX & SWT 8
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
M Drag & Drop in Swing (createTransferable) AWT, Swing, JavaFX & SWT 6
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
J Drag'n Drop imm selben Frame unterbinden AWT, Swing, JavaFX & SWT 3
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
X wiedermal Drag n Drop AWT, Swing, JavaFX & SWT 2
P Drag & Drop AWT, Swing, JavaFX & SWT 2
X Drag and Drop AWT, Swing, JavaFX & SWT 2
F Drag&Drop Jlist -> JList AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben