Map Editor

Gamer_DLC

Neues Mitglied
Hallo zusammen,
In der schule haben wir ein Spiel von unserem Lehrer zur Bearbeitung bekommen, ich wollte zu diesem Spiel ein Map Editor machen. Das Problem ist es Funktioniert nur halb und ich komme patu nicht dahinter warum und wo der Fehler ist. Zur Erklärung wie Der Editor funktionieren sollte: Man hat Links eine Anzahl an Bildern die man anklicken kann und diese werden dann gespeichert. In der Mitte hat man 25x25 rechteckige Felder die Die Lehre neue Map darstellen soll. Nach dem man ein Bild angeklickt hat geht man zu einem der Rechtecke und klickt auf dieses, danach wird dieses Bild dort eingefügt. Irgendwann soll das Bild Dann noch gespeichert werden um als Richtige Map die man einfügen kann zu nutzen aber so weit bin ich noch nicht. Vielleicht könnt ihr mir ja helfen danke schon mal im voraus :)


package Editor;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Gui extends JPanel {

private final int cellSize = 35; // Größe jeder Zelle
private final int gridWidth = 25; // Breite des Gitters
private final int gridHeight = 25; // Höhe des Gitters
private JLabel[][] cells; // Zweidimensionales Array von JLabel-Objekten
private ImageIcon lastClickedImage; // Das zuletzt angeklickte Bild

public Gui() {
cells = new JLabel[gridWidth][gridHeight];
for (int i = 0; i < gridWidth; i++) {
for (int j = 0; j < gridHeight; j++) {
cells[j] = new JLabel();
cells[j].setBounds(i * cellSize, j * cellSize, cellSize, cellSize);
add(cells[j]);
cells[j].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (lastClickedImage != null) {
JLabel clickedCell = (JLabel) e.getSource();
clickedCell.setIcon(lastClickedImage);
clickedCell.repaint(); // Aktualisiert die Zelle nach dem Platzieren des Bildes
}
}
});
}
}

addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
int x = e.getX() / cellSize;
int y = e.getY() / cellSize;
System.out.println("Mouse moved to (" + x + ", " + y + ")");
}
});
}

public void setLastClickedImage(ImageIcon image) {
lastClickedImage = image;
}


public static void main(String[] args) {
JFrame frame = new JFrame("Map Editor");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1200, 915);

JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(new Gui(), BorderLayout.CENTER);

JPanel leftPanel = new JPanel();
leftPanel.add(Box.createHorizontalStrut(400)); // Erstellt eine Horizontale Leerstelle
leftPanel = new JPanel(new GridLayout(12, 1));

for (int i = 0; i < 12; i++) {
ImageIcon icon = new ImageIcon("C:\\Users\\X\\Desktop\\res\\" + (i + 1) + ".png"); // Pfad zum Bild
Image image = icon.getImage(); // Hohlt Objekt
Image scaledImage = image.getScaledInstance(50, 50, Image.SCALE_SMOOTH); // Skaliert das Bild
ImageIcon scaledIcon = new ImageIcon(scaledImage); // Neues Icon mit Bild
JLabel label = new JLabel(scaledIcon);
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Image clicked: " + ((ImageIcon) ((JLabel) e.getSource()).getIcon()).toString());
Gui gui = (Gui) mainPanel.getComponent(0);
gui.setLastClickedImage((ImageIcon) ((JLabel) e.getSource()).getIcon());
}
});
leftPanel.add(label);
}
JPanel left = new JPanel();
left.add(Box.createHorizontalStrut(20)); // Abstand zwischen Bildern

JPanel mid = new JPanel();
mid.add(Box.createHorizontalStrut(20)); // Abstand zwischen Bildern

JPanel border = new JPanel();
border.add(Box.createHorizontalStrut(15)); // Abstand zu Canvis

JPanel rightPanel = new JPanel();
rightPanel.add(Box.createHorizontalStrut(400)); // Erstellt eine horizontale Leerstelle
rightPanel = new JPanel(new GridLayout(12, 1));

for (int i = 13; i < 25; i++) {
ImageIcon icon = new ImageIcon("C:\\Users\\X\\Desktop\\res\\" + (i + 1) + ".png"); // Pfad zum Bild
Image image = icon.getImage(); // Hohlt Objekt
Image scaledImage = image.getScaledInstance(50, 50, Image.SCALE_SMOOTH); // Skaliert das Bild
ImageIcon scaledIcon = new ImageIcon(scaledImage); // Neues Icon mit Bild
JLabel label = new JLabel(scaledIcon);
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Image clicked: " + ((ImageIcon) ((JLabel) e.getSource()).getIcon()).toString());
Gui gui = (Gui) mainPanel.getComponent(0);
gui.setLastClickedImage((ImageIcon) ((JLabel) e.getSource()).getIcon());
}
});
rightPanel.add(label);


JPanel combinedPanel = new JPanel();
combinedPanel.add(left);
combinedPanel.setLayout(new BoxLayout(combinedPanel, BoxLayout.X_AXIS)); // Setzt das Layout auf horizontale Anordnung
combinedPanel.add(leftPanel);
combinedPanel.add(mid);
combinedPanel.add(rightPanel);
combinedPanel.add(border);

mainPanel.add(combinedPanel, BorderLayout.WEST);

frame.add(mainPanel);
frame.setVisible(true);
}

}
}
 

KonradN

Super-Moderator
Mitarbeiter
Eine Bitte: Kannst Du den Source noch einmal mit Code Tags einstellen? Das geht ganz einfach über den Knopf </> links oberhalb des Eingabebereiches.

Das Problem ist, dass der Code nicht lesbar ist, da zum einen die Einrückung verloren geht und zum anderen "verschluckt" er die [i] als Symbol für "Start von kursivem Text". Daher findest Du die nicht mehr und ab dem ersten Vorkommen ist alles kursiv...

Vielen Dank!
 

Ähnliche Java Themen


Oben