Hallo,
ich bins mal wieder.
Ich möchte einen Map Editor bauen.
Dafür lade ich ein BufferedImage, wandel es in ein ImageIcon um und pack das in ein JLabel, pack das in ein JScrollPane und dies füge ich dem JFrame hinzu.
Nun habe ich eine Graphics2D Objekt erstellt um das BufferedImage anzumalen. In meinem Fall zeichnet er ein Rechteck um das ausgewählte Kästchen.
Sobald ich JFrame.repaint(); aufrufe, wird diese Änderung dann natürlich auch sichtbar.
Jetzt möchte ich mein BufferedImage wieder zum Original Zustand zurücksetzen.
Dafür habe ich ein zweites BufferedImages (final).
Wenn ich nun das angemalte BufferedImage (tileSetBufferedImage) mit dem Originalen ersetze (tileSetBufferedImageOriginal) mit diesem Befehl:
tileSetBufferedImageOriginal = tileSetBufferedImage; und dann repaint() aufrufe, wird dennoch das angemalte BufferedImage angezeigt.
Mein Code ist noch experimentell und nicht schön zu lesen:
Was mach ich hier falsch?
Danke im Voraus
ich bins mal wieder.
Ich möchte einen Map Editor bauen.
Dafür lade ich ein BufferedImage, wandel es in ein ImageIcon um und pack das in ein JLabel, pack das in ein JScrollPane und dies füge ich dem JFrame hinzu.
Nun habe ich eine Graphics2D Objekt erstellt um das BufferedImage anzumalen. In meinem Fall zeichnet er ein Rechteck um das ausgewählte Kästchen.
Sobald ich JFrame.repaint(); aufrufe, wird diese Änderung dann natürlich auch sichtbar.
Jetzt möchte ich mein BufferedImage wieder zum Original Zustand zurücksetzen.
Dafür habe ich ein zweites BufferedImages (final).
Wenn ich nun das angemalte BufferedImage (tileSetBufferedImage) mit dem Originalen ersetze (tileSetBufferedImageOriginal) mit diesem Befehl:
tileSetBufferedImageOriginal = tileSetBufferedImage; und dann repaint() aufrufe, wird dennoch das angemalte BufferedImage angezeigt.
Mein Code ist noch experimentell und nicht schön zu lesen:
Java:
package pokemon;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class PokeEditor extends JFrame {
private String filename = "tileset-advance.png";
BufferedImage tileSetBufferedImage;
final BufferedImage tileSetBufferedImageOriginal;
Graphics2D graphicstileSet;
ImageIcon tileSetImageIcon;
JLabel tileJLabel;
JScrollPane tileJScrollPane;
public PokeEditor() {
try {
tileSetBufferedImage = ImageIO.read(getClass().getResource(filename));
} catch (IOException e) {
e.printStackTrace();
}
tileSetBufferedImageOriginal = tileSetBufferedImage; //Hier erstelle ich das Original BufferedImage
graphicstileSet = tileSetBufferedImage.createGraphics();
tileSetImageIcon = new ImageIcon(tileSetBufferedImage);
tileJLabel = new JLabel(tileSetImageIcon);
tileJLabel.setBounds(0, 0, 128, 15971);
tileJLabel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
int xCoordinateBlock = e.getPoint().x;
int yCoordinateBlock = e.getPoint().y;
xCoordinateBlock = xCoordinateBlock / 16;
yCoordinateBlock = yCoordinateBlock / 16;
System.out.println("Position X= " + xCoordinateBlock + " Position Y= " + yCoordinateBlock);
resetTile();
neu();
graphicstileSet.drawRect(xCoordinateBlock * 16, yCoordinateBlock * 16, 16, 16);//; x,y,withd, height
neu();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Block wählen");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("Block nicht wählen");
}
});
tileJScrollPane = new JScrollPane(tileJLabel);
tileJScrollPane.setBounds(1387, 0, 150, 800);
tileJScrollPane.getVerticalScrollBar().setUnitIncrement(20);
this.add(tileJScrollPane);
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Bild laden bei Swing");
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setSize(1500, 860);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void neu() {
this.repaint();
}
public void resetTile() {
this.tileSetBufferedImage = this.tileSetBufferedImageOriginal;
this.repaint();
}
}
Was mach ich hier falsch?
Danke im Voraus