Swing Elemente für Inventar?

Devil0s

Aktives Mitglied
Welche Swing elemente und welches Layout nutzt man am besten für ein Inventar bei einem RPG.
Das inventar soll sich beim druecken der taste e oeffnen, mehrere plätze, und ein paar quick slots enthalten.
Das es sich auf Knopfdruck offnet hab ich schon (neues frame und JPanel) und ich hab auch schon ein Kontextmenü gestaltet.
Dies soll sich aber nur oeffnen. Ich hab mir überlegt für jeden slot ein JPanel zu nehmen damit sich das Kontextmenü nur bei den Slots oeffnen lässt.
Mit welchen elementen kann man am besten deren Inhalt in ein anderes verschieben und mit welchem layout kann man die am besten positionieren??


Ich hoffe ihr habt meine Frage richtig verstanden, haltet mich nicht für zu blöde und gebt mir eine gute Antwort.
Devil0s
 
Zuletzt bearbeitet:

Marco13

Top Contributor
IMHO klingt das eher nach einer JList: Die ordnet auch beliebig viele Elemente in einem "Quasi-GridLayout" an, erlaubt direkt die Auswahl und ist Scrollbar, und Drag&Drop kann mit wenigen Zeilen erledigt sein. Zu versuchen, das mit einem JPanel mit JLabels drin nachzubauen könnte aufwändig werden...
 

Devil0s

Aktives Mitglied
Wie kann ich die JList am besten als GridLayout darstellen?
das mit den Bildern hab ich mitlerweile hinbekommen?
Codebeispiel wäre interessant.
 
V

vanny

Gast
Wenn ich an ein Inventar in Spielen denke, hab ich immer ein 2dimensionales Grid vor Augen.
Wenn´s so auch von Dir beabsichtigt ist, ist mir auch grad schleierhaft, wie man da schnell mal mit ner JList arbeit sollte, aber Marco is ja Fuchs, vielleicht hat er ja nen trick auf Lager.
Ich würde wohl eher auf ne JTable zugreifen oder halt wirklich mit ner Slot-Klasse arbeiten, die von JPanel erbt und deren Instanzen dann in ein GridLayout packen.

Sonst poste doch mal eine Skizze, dann lässt sich das einfacher abgleichen.

Gruß Vanny
 

Devil0s

Aktives Mitglied
Da ich im Moment im Urlaub bin und das sozusagen mein Urlaubsproject ist und ich deshalb meinn netbook nutze auf dem ich leider kein Grafikprogramm habe siehts im Moment schlecht aus mit ner Skizze. Ich glaube ich werde das jetzt erstmal mit ursprünglichen Idee fertig zu machen
Aber vielleicht meldet sich Marco auch nochmal ;)
Gibt es nen Weg JPanels mit drag and drop zu verschieben ohne eine eigene methode zu schreiben?
 

Marco13

Top Contributor
Wenn ich an ein Inventar in Spielen denke, hab ich immer ein 2dimensionales Grid vor Augen.
Wenn´s so auch von Dir beabsichtigt ist, ist mir auch grad schleierhaft, wie man da schnell mal mit ner JList arbeit sollte, aber Marco is ja Fuchs, vielleicht hat er ja nen trick auf Lager.

Joa :cool: Der 1337 h@<|<€2 hat natürlich einen Trick: [c]list.setLayoutOrientation(JList.HORIZONTAL_WRAP);[/c] aufrufen :smoke:

Hier noch als KSKB, mit dem ganzen Drag&Drop-Gefraddel außenrum...
Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;


public class InventoryListExample
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI()
    {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Vector<Item> listData = new Vector<Item>();
        for (int i=0; i<20; i++)
        {
            listData.add(new Item(String.valueOf(i)));
        }
        JList inventoryList = new JList(listData);
        inventoryList.setCellRenderer(new DefaultListCellRenderer()
        {
            private static final long serialVersionUID = 7455382937012501303L;

            {
                setHorizontalAlignment(JLabel.CENTER);
                setPreferredSize(new Dimension(160,60));
            }

            @Override
            public Component getListCellRendererComponent(
                JList list, Object value, int index, 
                boolean isSelected, boolean cellHasFocus)
            {
                super.getListCellRendererComponent(
                    list, value, index, isSelected, cellHasFocus);
                Item item = (Item)value;
                setText("");
                setIcon(new ImageIcon(item.getImage()));
                return this;
            }
        });
        inventoryList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        inventoryList.setDragEnabled(true);
        inventoryList.setTransferHandler(new ItemTransferHandler());

        JScrollPane scrollPane = new JScrollPane(inventoryList);
        scrollPane.setBorder(BorderFactory.createTitledBorder("Inventory"));

        JPanel panel = new JPanel(new GridLayout(0,2));
        panel.add(scrollPane);
        panel.add(new DropArea());
        f.getContentPane().add(panel);
        f.pack();
        f.setVisible(true);

    }


    static class DropArea extends JLabel implements DropTargetListener
    {
        private static final long serialVersionUID = -5679944858109178081L;

        public DropArea()
        {
            super("Drop stuff here...");
            @SuppressWarnings("unused")
            DropTarget dropTarget = new DropTarget(this, this);
        }

        private void dropItem(Item item)
        {
            setText("Dropped here: "+item);
        }

        @Override
        public void drop(DropTargetDropEvent e)
        {
            Transferable transferable = e.getTransferable();

            if (transferable.isDataFlavorSupported(
                TransferableItem.ITEM_FLAVOR))
            {
                try
                {
                    e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                    Item item = (Item)transferable.getTransferData(
                        TransferableItem.ITEM_FLAVOR);
                    dropItem(item);
                }
                catch (UnsupportedFlavorException ex)
                {
                    e.rejectDrop();
                }
                catch (IOException ex)
                {
                    e.rejectDrop();
                }
            }
            else
            {
                e.rejectDrop();
            }
            e.getDropTargetContext().dropComplete(true);
        }

        @Override
        public void dragEnter(DropTargetDragEvent e)
        {
        }

        @Override
        public void dragOver(DropTargetDragEvent e)
        {
        }

        @Override
        public void dropActionChanged(DropTargetDragEvent e)
        {
        }

        @Override
        public void dragExit(DropTargetEvent e)
        {
        }
    }


    private static class ItemTransferHandler extends TransferHandler
    {
        private static final long serialVersionUID = -6404485349852032912L;

        @Override
        public Transferable createTransferable(JComponent component)
        {
            JList list = (JList) component;
            Object value = list.getSelectedValue();
            Item item = (Item)value;
            return new TransferableItem(item);
        }

        @Override
        public int getSourceActions(JComponent c)
        {
            return COPY ;
        }
    }    

    private static class TransferableItem implements Transferable
    {
        private static final DataFlavor ITEM_FLAVOR = 
            new DataFlavor(Item.class, "Item");
        private final Item item;

        TransferableItem(Item item)
        {
            this.item = item;
        }

        @Override
        public DataFlavor[] getTransferDataFlavors()
        {
            return new DataFlavor[]{ ITEM_FLAVOR };
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor)
        {
            return ITEM_FLAVOR.equals(flavor);
        }

        @Override
        public Object getTransferData(DataFlavor flavor) 
        throws UnsupportedFlavorException
        {
            if (isDataFlavorSupported(flavor))
            {
                return item;
            }
            throw new UnsupportedFlavorException(flavor);
        }

    }


    private static class Item
    {
        private final String name;
        private final BufferedImage image;

        public Item(String name)
        {
            this.name = name;
            image = new BufferedImage(150,50, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g = image.createGraphics();
            g.setColor(Color.DARK_GRAY);
            g.fillRect(0,0,150,50);
            g.setColor(Color.LIGHT_GRAY);
            g.fillRect(2,2,146,46);
            g.setColor(Color.RED);
            g.drawString(name, 10, 20);
            g.dispose();
        }

        public BufferedImage getImage()
        {
            return image;
        }

        @Override
        public String toString()
        {
            return name;
        }
    }


}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Mit Swing eine Grafische Oberfläche erstellen Spiele- und Multimedia-Programmierung 1
F Swing Component draggen Spiele- und Multimedia-Programmierung 25
K AWT oder Swing Spiele- und Multimedia-Programmierung 7
C Schiffe versenken mit Swing Spiele- und Multimedia-Programmierung 5
A Swing Komponenten aktiv neuzeichnen Spiele- und Multimedia-Programmierung 2
X Spiel mit Swing-Komponenten rendern Spiele- und Multimedia-Programmierung 11
T SWING ausreichend? (mittelkleines 2D-Spiel) Spiele- und Multimedia-Programmierung 8
T MouseControl : JME Canvas in Swing Gui Spiele- und Multimedia-Programmierung 7
T Nifty oder doch Swing ?! Spiele- und Multimedia-Programmierung 32
J Spiel mit Java SWING, LWJGL und JMonkey [Anfänger braucht Hilfe] Spiele- und Multimedia-Programmierung 10
E Animationen und Pfadinterpolation auf basis von Swing Spiele- und Multimedia-Programmierung 2
S Swing und VolatileImage Spiele- und Multimedia-Programmierung 20
ice-breaker [Swing] Isometrie Spiele- und Multimedia-Programmierung 5
J Java3D & Swing: JLabel auf Box positionieren? Spiele- und Multimedia-Programmierung 2
A Multidimensionler Array - Elemente vergleichen (TicTacToe) Spiele- und Multimedia-Programmierung 4
G Elemente aus jpg erkennen Spiele- und Multimedia-Programmierung 5
G gezeichnete Elemente überprüfen ob sie ein Punkt xy abdecken Spiele- und Multimedia-Programmierung 3
A Elemente mit Abständen zueinander 2dimensional einzeichnen Spiele- und Multimedia-Programmierung 2
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
MiMa Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
P Spielfeld für RPG Spiele- und Multimedia-Programmierung 15
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
K Einfache Engine für einfaches 3D gesucht Spiele- und Multimedia-Programmierung 10
C KI für Skatspiel - Wie können die Computerspieler eigenständig handeln? Spiele- und Multimedia-Programmierung 10
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
Kenan89 Kleines Projekt für Java Spiele- und Multimedia-Programmierung 5
M Empfehlungen für ein 2D-Jump'n'run Spiele- und Multimedia-Programmierung 4
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
C Wo ist der MP3 Plugin für JMF? Spiele- und Multimedia-Programmierung 3
qwerqer Design Pattern gesucht für Spielregeln Spiele- und Multimedia-Programmierung 2
M Java als Programmiersprache für kommerzielle Spieleentwicklung? Spiele- und Multimedia-Programmierung 3
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
Y Warum Thread für Spieleprogrammierung? Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
M Minecraft Suche Java Programmierer (für Minecraft) Spiele- und Multimedia-Programmierung 2
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
T 2D Menü für 3D Spiel Spiele- und Multimedia-Programmierung 5
T Grundlagenwissen für den 3D Raum Spiele- und Multimedia-Programmierung 6
I getSubImage sorgt für starken Performanceeinbruch Spiele- und Multimedia-Programmierung 6
M technologie für video, webcam & co Spiele- und Multimedia-Programmierung 25
C Java für große Spiele geeignet ? Spiele- und Multimedia-Programmierung 101
D Libraryempfehlung für Effekte Spiele- und Multimedia-Programmierung 3
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
D Tabelle für Spiel Spiele- und Multimedia-Programmierung 3
N Grundlagen für ein Jump&Run Spiele- und Multimedia-Programmierung 3
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben