paintComponent() übergeben

Jinro

Mitglied
Hallo,

ich versuche ein Brettspiel nach MVC-Vorlage zu implementieren. Ich habe ein Frame, dem ein Panel übergeben wird, in dem das Brett gemalt wird. Jetzt möchte ich weiter, dass auf Mausklick in bestimmten bereichen ein Spielstein in Forem eines Bildes gemalt wird.

Nach durchforsten diverser Themen hier, habe ich diesen Versuch gestrichen:

Java:
 public static void setStone(Field field) {
        Graphics2D sSt = (Graphics2D) getGraphics();
        border = 50;
        squaresize = Merelpainter.getSquaresize();
        BufferedImage redStone = null;
        try {
            redStone = ImageIO.read(new File("img/stone-red.png"));
        } catch (IOException e) {
        }
        BufferedImage blueStone = null;
        try {
            blueStone = ImageIO.read(new File("img/stone-blue.png"));
        } catch (IOException e) {
        }

        // Field x1-y7
        if (field.getX() == XAxis.X1 && field.getY() == YAxis.Y7) {
            if (UiModel.getCurrentPlayer().getColor() == StoneColor.WHITE) {
                System.out.println("Roter stein gesetzt");
                sSt.drawImage(redStone, (border / 2), (border / 2), null);
            } else {
                System.out.println("Blauer Stein gesetzt");
                sSt.drawImage(blueStone, (border / 2), (border / 2), null);
            }
        }

    }
auch weil sich das getGraphics() nicht mit der static-variante vereint...


und habe es mir der paintComponent Methode versucht. meine methode sieht jetzt wie folgt aus:

Java:
public class Merelpainter extends JPanel implements MouseMotionListener {

public static void paintComponent(Graphics g, Field field) {
        Graphics2D sSt = (Graphics2D) g;
        border = 50;
        squaresize = Merelpainter.getSquaresize();
        BufferedImage redStone = null;
        try {
            redStone = ImageIO.read(new File("img/stone-red.png"));
        } catch (IOException e) {
        }
        BufferedImage blueStone = null;
        try {
            blueStone = ImageIO.read(new File("img/stone-blue.png"));
        } catch (IOException e) {
        }

        // Field x1-y7
        if (field.getX() == XAxis.X1 && field.getY() == YAxis.Y7) {
            if (UiModel.getCurrentPlayer().getColor() == StoneColor.WHITE) {
                System.out.println("Roter stein gesetzt");
                sSt.drawImage(redStone, (border / 2), (border / 2), null);
            } else {
                System.out.println("Blauer Stein gesetzt");
                sSt.drawImage(blueStone, (border / 2), (border / 2), null);
            }
        }

    }
}

Dies eröffnet mir 1Frage und 1Problem:

Frage: in der Klasse Merelpainter habe ich jetzt 2 methoden paintComponent (1für das Spielbrett, 1 für die Spielsteine) --> können die sich in die Quere kommen bzw. kann ich diese 2 Methoden in der selben Klasse implementieren..

Problem: wenn ich jetzt bei meiner spieldurchführung einen Spielstein setzen will, muss ich "Merelpainter.paintComponent(Graphics g, Field field)" aufrufen.. das Feld kann ich einfach bestimmen, aber wie übergebe ich das Graphics-Objekt, bzw. gibt es eine Möglichkeit das zu umgehen? (mein 1. Ansatz - siehe oben- hat sich dafür nicht geeignet..

kann mir da jemand weiterhelfen??
 

Schandro

Top Contributor
Frage: in der Klasse Merelpainter habe ich jetzt 2 methoden paintComponent (1für das Spielbrett, 1 für die Spielsteine) --> können die sich in die Quere kommen bzw. kann ich diese 2 Methoden in der selben Klasse implementieren..
Du musst die Methode
Code:
paintComponent(Graphics g)
vom JPanel überschreiben. Nur mit dem Graphics-Object was diese Methode übergeben bekommt darfst du malen! niemals getGraphics aufrufen, das ist böse.
Beispiel:
Java:
	@Override
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		paintComponent(g,myField);
	}

Noch ne info:
Jede Methode derselben Klasse muss eine unterschiedliche Signatur haben. Diese setzt sich aus dem Namen (in deinem Fall "paintComponent") und den Parameter zusammen. Wenn also 2 Methoden gleich heissen, aber unterschiedliche Parameter erwarten, ist das kein Problem. Das ganze nennt sich überladen.
 
Zuletzt bearbeitet:

Jinro

Mitglied
Java:
	@Override
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		paintComponent(g,myField);
	}

die Methode mit getGraphics habe ich ja bereits verworfen..

i-wie löst dein beispiel mein problem leider nicht (oder ich verstehe es nicht), da ich auf diese methode von einer anderen klasse aus zugreifen will und das Problem ja darin besteht, das ich dort kein "Graphics" objekt habe das ich übergeben kann...und durch das static das super.** nicht geht...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
H new Operator in paintComponent - Speicherprobleme vorprogrammiert? AWT, Swing, JavaFX & SWT 2
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
G update, paintComponent AWT, Swing, JavaFX & SWT 1
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
D PaintComponent wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
K Swing paintComponent, JPanel auslagern, ChangeEvents AWT, Swing, JavaFX & SWT 7
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
B AWT paintComponent wird nur 2 mal ausgeführt?! AWT, Swing, JavaFX & SWT 5
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
G Swing Flackern nach Override von paintComponent() AWT, Swing, JavaFX & SWT 3
M Swing paintComponent in rekusivem JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 2
M DefaultTableModel ruft paintComponent auf ! AWT, Swing, JavaFX & SWT 4
T Swing paintComponent(); AWT, Swing, JavaFX & SWT 24
K Swing JButton paintComponent überschreiben AWT, Swing, JavaFX & SWT 5
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
B 2D-Grafik paintComponent für rechteckigen Bereich? AWT, Swing, JavaFX & SWT 6
P Swing problem mit paintComponent AWT, Swing, JavaFX & SWT 2
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
K paintComponent nicht aufgerufen AWT, Swing, JavaFX & SWT 2
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
S auf paintComponent() warten AWT, Swing, JavaFX & SWT 34
W JPanel Überschreiben // paintComponent? AWT, Swing, JavaFX & SWT 4
propra Wieso wird paintComponent() beim Start 2 malausgeführt? AWT, Swing, JavaFX & SWT 4
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
P JLabel paintComponent AWT, Swing, JavaFX & SWT 3
Z Swing paintcomponent und menbar Problem AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
R 2D-Grafik auf JPanel zeichen - ohne @Override paintComponent AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent & BorderFactory AWT, Swing, JavaFX & SWT 2
A paintComponent AWT, Swing, JavaFX & SWT 4
T Rechtecke zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 3
R paintComponent direkt bei actionPerformed aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
A paintComponent() - Animation AWT, Swing, JavaFX & SWT 2
K JPanel und paintComponent AWT, Swing, JavaFX & SWT 8
E 2D-Grafik Zeichnen außerhalb der "paintComponent"-Methode? AWT, Swing, JavaFX & SWT 5
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Game of Life - PaintComponent-Problem / Timer? AWT, Swing, JavaFX & SWT 8
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
N paintComponent für Graphics ansprechen AWT, Swing, JavaFX & SWT 2
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
kodela Swing paintComponent() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 19
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
E WARUM wird paintComponent nicht aufgerufen? AWT, Swing, JavaFX & SWT 12
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
G Swing paintComponent Effizienz? AWT, Swing, JavaFX & SWT 4
R paintComponent Kollision AWT, Swing, JavaFX & SWT 2
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent() AWT, Swing, JavaFX & SWT 2
T Swing paintComponent problem AWT, Swing, JavaFX & SWT 3
MrGe getWidth(); getHeight(); außerhalb von paintComponent AWT, Swing, JavaFX & SWT 4
A paintComponent überdeckt ... AWT, Swing, JavaFX & SWT 13
JFeel-x repaint für Aufruf von paintComponent-Klasse ungeeignet? AWT, Swing, JavaFX & SWT 11
F Wer ruft paintComponent() Methode auf? AWT, Swing, JavaFX & SWT 9
@ JPanel: kein paintComponent() trotz repaint() AWT, Swing, JavaFX & SWT 4
G paintComponent Problem AWT, Swing, JavaFX & SWT 6
T paintComponent() überschreiben: Platz für Border freihalten? AWT, Swing, JavaFX & SWT 6
G paintComponent JPanel im JApplet AWT, Swing, JavaFX & SWT 2
X Speichern in der paintComponent() Methode AWT, Swing, JavaFX & SWT 15
W JLabel + paintComponent AWT, Swing, JavaFX & SWT 2
V Wieviel Logik in paintComponent? AWT, Swing, JavaFX & SWT 7
hdi super.paintComponent(g); soll nicht alles löschen AWT, Swing, JavaFX & SWT 2
G paintComponent() Methode für JPanel in NetBeans überschreibe AWT, Swing, JavaFX & SWT 2
L Problem mit paintComponent() under java < 1.6 under Windo AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
N Probleme mit paintComponent und GradientPaint AWT, Swing, JavaFX & SWT 5
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
D performance problem: paintcomponent, alphacomp, bufferedImag AWT, Swing, JavaFX & SWT 10
A Probelme mit großen BufferedImage in paintComponent AWT, Swing, JavaFX & SWT 7
C Bei Skalierung wird paintComponent() nicht aufgerufen,warum? AWT, Swing, JavaFX & SWT 4
K Problem repaint()->paintComponent AWT, Swing, JavaFX & SWT 9
G paintComponent wird nicht dargestellt AWT, Swing, JavaFX & SWT 5
T Kuchendiagramm - mit paintComponent nach JButton druck zeich AWT, Swing, JavaFX & SWT 4
R paintComponent wird anscheinend nicht aufgerufen AWT, Swing, JavaFX & SWT 2
T JPanel mit paintComponent methode im JInternalFrame AWT, Swing, JavaFX & SWT 3
M super.paintComponent(g); aufrufen oder nicht? AWT, Swing, JavaFX & SWT 8
M Unterschied zwischen paintComponent() und paint()? AWT, Swing, JavaFX & SWT 4
D JTextArea in der paintComponent () hinzufügen? AWT, Swing, JavaFX & SWT 9
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
B Schon wieder ein Problem mit paintComponent(). AWT, Swing, JavaFX & SWT 2
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben