profiler84
Grünschnabel
Ich denke das Problem mit der ArrayListe jetzt im Griff zu haben, leider habe ich ein weiteres Problem
Ich erstelle jetzt ein JPanel mit den Daten die ich aus dem XML bekomme mit:
Das klappt soweit so gut, mit den Mouseevents mache ich ein "Rechtsklick"-Kontextmenü auf mit: "View item", "Move to bag" und "Drop" auf.
Zur zeit wird bei auswahl des Kontextmenüs nur ein Text ausgegeben.
Wie kann ich durch auswahl von sagen wir "View item" die Item-Daten aus der ArrayList abfragen? D.h. der Mouselistener muss wissen über
welchem Item die Maus gerade ist und das Kontextmenü aufgerufen wurde. Und auch wenn ich weiss welche Komponente ich anspreche
müsste ich eigentlich für jeden Itemtyp (Helm, Waffe, usw..) einen eigenen MouseListener schreiben, oder? Ich blicke hier nicht ganz durch. Bitte um Hilfe.
Ich erstelle jetzt ein JPanel mit den Daten die ich aus dem XML bekomme mit:
Code:
package Test_packages;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Map;
import javax.swing.border.LineBorder;
public class ShowInventory extends JPanel implements MouseListener
{
// Declare variables
private JButton armorButton;
private JButton weaponButton;
private JButton shieldButton;
private JButton helmetButton;
private JButton bootsButton;
private JPopupMenu contextmenu = new JPopupMenu();
private JMenuItem viewDetails, move2bag, dropItem;
private String weaponsrc, armorsrc, helmetsrc, shieldsrc, bootssrc;
// Retrieve data from xml
XmlDataList xml = new XmlDataList("src/Test_packages/inventory.xml");
Map map = xml.getHashMap();
// Extract the correct ArrayList from Hashmap
ArrayList<Item> armorlist = (ArrayList)map.get("Armor");
Item armor = armorlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> helmetlist = (ArrayList)map.get("Helmet");
Item helmet = helmetlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> weaponlist = (ArrayList)map.get("Weapon");
Item weapon = weaponlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> shieldlist = (ArrayList)map.get("Shield");
Item shield = shieldlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> bootslist = (ArrayList)map.get("Boots");
Item boots = bootslist.get(0); // 1. Item aus der Arraylist
public ShowInventory()
{
// Retrieve data from xml
XmlDataList xml = new XmlDataList("src/Test_packages/inventory.xml");
Map map = xml.getHashMap();
// Extract the correct ArrayList from Hashmap
ArrayList<Item> armorlist = (ArrayList)map.get("Armor");
Item armor = armorlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> helmetlist = (ArrayList)map.get("Helmet");
Item helmet = helmetlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> weaponlist = (ArrayList)map.get("Weapon");
Item weapon = weaponlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> shieldlist = (ArrayList)map.get("Shield");
Item shield = shieldlist.get(0); // 1. Item aus der Arraylist
ArrayList<Item> bootslist = (ArrayList)map.get("Boots");
Item boots = bootslist.get(0); // 1. Item aus der Arraylist
// Initiate images sources
armorsrc = armor.getImage();
helmetsrc = helmet.getImage();
bootssrc = boots.getImage();
shieldsrc = shield.getImage();
weaponsrc = weapon.getImage();
// Create empty labels
JLabel helmetleft= new JLabel();
JLabel helmetright= new JLabel();
JLabel bootsright= new JLabel();
JLabel bootsleft= new JLabel();
// Initiatte JButtons for Inventory and load images
armorButton = new JButton(new ImageIcon(armorsrc));
armorButton.setBorder(new LineBorder(Color.BLACK));
weaponButton= new JButton(new ImageIcon(weaponsrc));
weaponButton.setBorder(new LineBorder(Color.BLACK));
shieldButton= new JButton(new ImageIcon(shieldsrc));
shieldButton.setBorder(new LineBorder(Color.BLACK));
helmetButton= new JButton(new ImageIcon(helmetsrc));
helmetButton.setBorder(new LineBorder(Color.BLACK));
bootsButton= new JButton(new ImageIcon(bootssrc));
bootsButton.setBorder(new LineBorder(Color.BLACK));
// Create right-click context menu
viewDetails = new JMenuItem("View item");
contextmenu.add(viewDetails);
move2bag = new JMenuItem("Move Item to bag");
contextmenu.add(move2bag);
dropItem = new JMenuItem("Drop Item");
contextmenu.add(dropItem);
/** Start add Listeners **/
armorButton.addMouseListener(this);
weaponButton.addMouseListener(this);
shieldButton.addMouseListener(this);
helmetButton.addMouseListener(this);
bootsButton.addMouseListener(this);
// Handle the events of context menu
viewDetails.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("View Details completed");
}
});
move2bag.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Moved to bag");
}
});
dropItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Item dropped");
}
});
/** End add Listeners **/
/** Start add Components to Panel **/
add(helmetleft);
add(helmetButton);
add(helmetright);
add(weaponButton);
add(armorButton);
add(shieldButton);
add(bootsleft);
add(bootsButton);
add(bootsright);
}
public void mouseReleased(MouseEvent Me){
if(Me.isPopupTrigger()){
contextmenu.show(Me.getComponent(), Me.getX(), Me.getY());
}
}
public void mouseClicked(MouseEvent Me){
}
public void mousePressed(MouseEvent Me){
}
public void mouseExited(MouseEvent Me){
}
public void mouseEntered(MouseEvent Me){
}
public void actionPerformed(final ActionEvent e) {
ShowInventory.this.repaint();
}
}
Das klappt soweit so gut, mit den Mouseevents mache ich ein "Rechtsklick"-Kontextmenü auf mit: "View item", "Move to bag" und "Drop" auf.
Zur zeit wird bei auswahl des Kontextmenüs nur ein Text ausgegeben.
Wie kann ich durch auswahl von sagen wir "View item" die Item-Daten aus der ArrayList abfragen? D.h. der Mouselistener muss wissen über
welchem Item die Maus gerade ist und das Kontextmenü aufgerufen wurde. Und auch wenn ich weiss welche Komponente ich anspreche
müsste ich eigentlich für jeden Itemtyp (Helm, Waffe, usw..) einen eigenen MouseListener schreiben, oder? Ich blicke hier nicht ganz durch. Bitte um Hilfe.