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);
}
}
}
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);
}
}
}