Methoden repaint() zeichnet JPanel falsch

adembey

Neues Mitglied
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:
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;

                }
            }
        }
    }
}
SchiffeFeld ist eine Klasse von mir, die ein 2D Array enthält und ein paar Methoden. Hab auch noch ein Screenshot gemacht.
q5ojg4fy.png

Ich hoffe ihr könnt mir helfen. Danke im vorraus🙂
 
Zuletzt bearbeitet:
Java:
//erste Zeile in der paintComponent:
super.paintComponent(g);
 

Neue Themen


Zurück
Oben