Hey,
also ich programmiere zur zeit an einem Schiffe versenken Projekt und bin auch schon zum größten Teil fertig. Aber ich hab ein Problem, das ich einfach nicht lösen kann.
Ich habe im JFrame 2 JPanel's, in den JPanels zeichne ich mit paintComponent() ein Spiel Feld. Das Problem ist das in einem der JPanel's das andere JPanel oder auch andere Komponenten des Frames reingezeichnet werden, wenn ich die repaint() Methode(vom JFrame oder auch vom JPanel) aufrufe und sich etwas verändert hat. Diese verschwinden aber auch gleich wenn ich die Fenstergröße ändere oder repaint() aufrufe obwohl sich nichts ändert. Hier mal das wichtigste vom JPanel Code:
SchiffeFeld ist eine Klasse von mir, die ein 2D Array enthält und ein paar Methoden. Hab auch noch ein Screenshot gemacht.
Ich hoffe ihr könnt mir helfen. Danke im vorraus
also ich programmiere zur zeit an einem Schiffe versenken Projekt und bin auch schon zum größten Teil fertig. Aber ich hab ein Problem, das ich einfach nicht lösen kann.
Ich habe im JFrame 2 JPanel's, in den JPanels zeichne ich mit paintComponent() ein Spiel Feld. Das Problem ist das in einem der JPanel's das andere JPanel oder auch andere Komponenten des Frames reingezeichnet werden, wenn ich die repaint() Methode(vom JFrame oder auch vom JPanel) aufrufe und sich etwas verändert hat. Diese verschwinden aber auch gleich wenn ich die Fenstergröße ändere oder repaint() aufrufe obwohl sich nichts ändert. Hier mal das wichtigste vom JPanel Code:
Java:
public class Gitter extends javax.swing.JPanel {
int anzahlLinien = 10;
int kBreite = 0;
int kHoehe = 0;
protected SchiffeFeld sf = new SchiffeFeld();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image wasser = toolkit.createImage(getClass().getResource("wasser.jpg"));
Image tot = toolkit.createImage(getClass().getResource("Totenkopf.png"));
Image schiff = toolkit.createImage(getClass().getResource("icon.png"));
@Override
public void paintComponent(Graphics g) {
kBreite = getWidth() / anzahlLinien;
kHoehe = getHeight() / anzahlLinien;
g.setColor(Color.black);
for (int i = 0; i <= anzahlLi; i++) {
g.drawLine(kBreite * i, 0, kBreite * i, getHeight());
}
for (int i = 0; i <= anzahlLi; i++) {
g.drawLine(0, kHoehe * i, getWidth(), kHoehe * i);
}
for (int ii = 0; ii < sf.getGroesseY() - 1; ii++) {
for (int i = 0; i < sf.getGroesseX() - 1; i++) {
switch (sf.getElementAnStelle(i + 1, ii + 1)) {
case 1:
g.setColor(Color.green);
//g.fillRoundRect(i * kBreite, ii * kHoehe, kBreite, kHoehe, 35, 35);
g.drawImage(schiff, i*kBreite, ii*kHoehe, kBreite, kHoehe, this);
break;
case 3:
g.setColor(Color.blue);
//g.fillRoundRect(i * kBreite, ii * kHoehe, kBreite, kHoehe, 35, 35);
g.drawImage(wasser, i*kBreite, ii*kHoehe, kBreite, kHoehe, this);
break;
case 4:
g.setColor(Color.red);
g.drawImage(tot, i*kBreite, ii*kHoehe, kBreite, kHoehe, this);
break;
}
}
}
}
}
Ich hoffe ihr könnt mir helfen. Danke im vorraus
Zuletzt bearbeitet: