Hallo liebe Leute,
ich bin ein Java Anfänger und habe mal aus Spaß mit einem neuen Projekt angefangen. Ich wollte ein kleines Spielchen schreiben mit einer 2D Karte auf, der man bauen können sollte. Ich scheitere daran, dass Programm so zu schreiben, dass man auch etwas bauen kann, wie Häuser oder Bäume.
Die Idee war, über ein Array von Labels, die in einem GridLayout angeordnet werden, eine Spielkarte zu schaffen und über ein MouseListener das Icon des geklickten Labels mit einem anderem zu ersetzen.
Ich habe folgenden gekürzten Code(ohne Bäume, Berge und Zufallsvariablen), wo es mir nur um den MouseListener geht geschrieben:
Ich wäre euch super dankbar, könntet ihr mir sagen, was ich falsch mache. Wenn, das was ich vorhabe mit diesem Ansatz nicht geht, dann könnt ihr mir das auch sagen, dann lasse ich es einfach.
ich bin ein Java Anfänger und habe mal aus Spaß mit einem neuen Projekt angefangen. Ich wollte ein kleines Spielchen schreiben mit einer 2D Karte auf, der man bauen können sollte. Ich scheitere daran, dass Programm so zu schreiben, dass man auch etwas bauen kann, wie Häuser oder Bäume.
Die Idee war, über ein Array von Labels, die in einem GridLayout angeordnet werden, eine Spielkarte zu schaffen und über ein MouseListener das Icon des geklickten Labels mit einem anderem zu ersetzen.
Ich habe folgenden gekürzten Code(ohne Bäume, Berge und Zufallsvariablen), wo es mir nur um den MouseListener geht geschrieben:
Java:
import javax.swing.JFrame;
public class Map3 {
public static void main(String[] args) {
JFrame jf = new MapBuilder();
}
}
Java:
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.ScrollPaneConstants;
public class MapBuilder extends JFrame implements MouseListener{
public JLabel field[];
//Bilddateien zur Kartengestaltung
Icon gras = new ImageIcon(getClass().getResource("Gras1.png"));
Icon baum = new ImageIcon(getClass().getResource("Baum1.png"));
public MapBuilder() {
//Frame
setSize(500, 500);
setLocationRelativeTo(null);
setTitle("Map");
setDefaultCloseOperation(EXIT_ON_CLOSE);
//Auf diesem Panel werden alle Grasbfelder angeordnet
JPanel panela = new JPanel();
panela.setVisible(true);
panela.setBackground(Color.black);
panela.setLayout(new java.awt.GridLayout( 100, 100, 0, 0 ));
//Erzeugt i-mal Frasfelder die im Panel in einem GridLayout angeordnet werden
JLabel [] field = new JLabel[10000];
for(int i=0;i<10000;i++){
field[i] = new JLabel();
field[i].setSize(25,25);
field[i].setIcon(gras);
// MouseListener damit, wenn das Label geklickt wird ein ein neues Bild erscheint zB Haus oder Baum
field[i].addMouseListener(this);
panela.add(field[i]);}
JScrollPane scrollPane2 = new JScrollPane (
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
JViewport viewport2 = scrollPane2.getViewport();
viewport2.setView(panela);
add (scrollPane2);
repaint();
setVisible(true);
}
public void mouseClicked(MouseEvent me) {
// Hier liegt der Fehler
field[i].setIcon(baum);
}
public void mousePressed(MouseEvent me) {
}
public void mouseReleased(MouseEvent me) {
}
public void mouseEntered(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}
}