Hallo,
ich habe vor in einer Klasse (SpielFeld) ein Raster von mehreren Quadraten zu erzeugen. Diese Quadrate sollen alle zu beginn das selbe Bild zeigen. Bis jetzt habe ich folgendes geschrieben:
Mein Problem ist, dass ich Gerne zu beginn in dem JFrame das JPanel mit den Bildern zeichnen möchte. Später soll das ganze erweitert werden und mit einem MouseListener per Mausklick die Bilder auf dem JPanel sich ändern. Wie steuere ich genau wann paint aufgerufen wird und das es auch wirklich auf dem JPanel gezeichnet wird. Muss dazu das JFrame auch refreshed werden? Habe schon einiges gelesen, steige aber leider nicht so ganz dahinter. Danke schonmal für eure Hilfe.
ich habe vor in einer Klasse (SpielFeld) ein Raster von mehreren Quadraten zu erzeugen. Diese Quadrate sollen alle zu beginn das selbe Bild zeigen. Bis jetzt habe ich folgendes geschrieben:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.util.ArrayList;
import java.util.Random;
import java.awt.color.*;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class SpielFeld extends JFrame{
JPanel hauptPanel;
JFrame hauptFenster;
int spalte=20;
int zeile=20;
int schiffe=3;
int felder=spalte+zeile;
Image[] bilder;
int bilderAnzahl=3;
BufferedReader bilderLeser;
Bild bild;
public static void main(String[] args){
SpielFeld spiel = new SpielFeld();
spiel.neuesSpiel();
}
public void neuesSpiel(){
bilder = new Image[bilderAnzahl];
//Fenster erzeugen
hauptFenster = new JFrame("Schiffe versenken");
hauptFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
hauptFenster.setVisible(true);
hauptFenster.setSize(420, 450);
hauptFenster.setLocationRelativeTo(null);
//Bilder einlesen
test =(new ImageIcon(this.getClass().getResource("1.png"))).getImage();
bild = new Bild();
hauptPanel = new JPanel();
hauptFenster.add(BorderLayout.CENTER, hauptPanel);
JButton button = new JButton("test");
hauptPanel.add(bild);
}
@Override public void paint(Graphics g){
System.out.println("paint Hauptklasse");
}
class Bild extends JPanel {
public void paintComponent(Graphics g){
System.out.println("paintComponent");
}
public void paint(Graphics g){
System.out.println("paint");
//g.drawImage(test,20,20,this);
g.setColor(Color.blue);
g.fillRect(10, 10, 30, 40);
}
}
}
Mein Problem ist, dass ich Gerne zu beginn in dem JFrame das JPanel mit den Bildern zeichnen möchte. Später soll das ganze erweitert werden und mit einem MouseListener per Mausklick die Bilder auf dem JPanel sich ändern. Wie steuere ich genau wann paint aufgerufen wird und das es auch wirklich auf dem JPanel gezeichnet wird. Muss dazu das JFrame auch refreshed werden? Habe schon einiges gelesen, steige aber leider nicht so ganz dahinter. Danke schonmal für eure Hilfe.