# Kreuz lässt sich nicht zeichnen



## Reality (30. Sep 2004)

Hi,
ich will gerade ein Tic Tac Toe Speil programmieren. Ich scheitere momentan beim Kreuz zeichnen:


```
public void paint(Graphics g){
    //Spielfeld
    g.fillRect(60, 120, 150, 2);
    g.fillRect(60, 170, 150, 2);
    g.fillRect(110, 70, 2, 150);
    g.fillRect(160, 70, 2, 150);
    
    // die Zahlen 5 und 5 sind nur zum Testen...
    drawCross(g, 5, 5);
  }

  public void drawCross(Graphics g, int x, int y){
    //Ein Kreuz bzw. 'X' malen
    int x_pos[] = {x, x+15, x+15, x};
    int y_pos[] = {y, y+15, 5, y+15};
    
    g.setColor(Color.RED);
    g.drawPolygon(x_pos, y_pos, 2);
  }
```

Es wird nur das Spielfeld gezeichnet. 
Was mache ich falsch?!

Liebe Grüße
Reality


----------



## Reality (30. Sep 2004)

Der komplette Quelltext zum Compilieren und ausprobieren:


```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Spielfeld extends JFrame{

  Spielfeld(){
    JPanel contentPane = (JPanel) getContentPane();
    contentPane.setBackground(Color.WHITE);
    setContentPane(contentPane);
  }

  public void paint(Graphics g){
    //Spielfeld zeichnen
    g.fillRect(60, 120, 150, 2);
    g.fillRect(60, 170, 150, 2);
    g.fillRect(110, 70, 2, 150);
    g.fillRect(160, 70, 2, 150);

    drawCross(g, 5, 5);
  }

  public void drawCross(Graphics g, int x, int y){
    //Ein 'X' malen
    int x_pos[] = {x, x+15, x+15, x};
    int y_pos[] = {y, y+15, 5, y+15};

    g.setColor(Color.RED);
    g.drawPolygon(x_pos, y_pos, 2);
  }

  public static void main(String[] args) {
    JFrame frame = new Spielfeld();
    frame.setSize(300, 300);
    frame.setVisible(true);
    frame.setTitle("Tic Tac Toe");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.addMouseListener(new MouseAdapter(){
      public void mouseClicked(MouseEvent me){
        int x = me.getX();
        int y = me.getY();
      }
    });
  }
}
```

Liebe Grüße
Reality


----------



## Anubis (30. Sep 2004)

In der Paint-Methode wird keine Farbe gesetzt.
Ist das normal, oder könnte es daran liegen?
------------
Edit: Bei mir klappt's mit dem obigen Code


----------



## Reality (30. Sep 2004)

Wenn keine Farbe gesetzt wird, wird automatisch schwarz genommen.



> Edit: Bei mir klappt's mit dem obigen Code



Bei dir erscheint auch ein rotes X? 

Liebe Grüße
Reality


----------



## Reality (1. Okt 2004)

Reality hat gesagt.:
			
		

> Bei dir erscheint auch ein rotes X?


Sorry, hab mich unklar ausgedrückt. "Bei dir erscheint ein rotes X?", soll das heissen, denn bei mir erscheint es nicht.

Könnten vielleicht die anderen mal den Code compilieren und berichten, ob ein rotes X erscheint? Ich suche immernoch eine Lösung des Problems.

Liebe Grüße
Reality


----------



## Anubis (1. Okt 2004)

Nee, ein rotes X war nicht dabei.


----------



## Anubis (1. Okt 2004)

Problem gefunden!!!! Die Y-Koordiante hängt vom Oberen rand des Fensters ab. Das heisst: Du mlast dein Kruz in die Titelleiste, deshalb ist scheinbar nichst zu sehen.
Ein Kreuz ist kein Polygon. Ich habs mal korrigiert:

```
public void drawCross(Graphics g, int x, int y){
    //Ein 'X' malen
    g.setColor(Color.RED);
	g.drawLine(x, y, x+15, y+15);
	g.drawLine(x+15, y, x, y+15);
  }
```

Führe die Methode mal mit
	
	
	
	





```
drawCross(g, 40, 40);
```
 aus, dann siehst du es auch.


----------



## Reality (1. Okt 2004)

Hi Anubis,
danke für deine Hilfe! 

Kennst du eine Möglichkeit die Linien dicker zu zeichnen?

Diese Methode finde ich etwas umständlich:


```
public void drawCross(Graphics g, int x, int y){
    //Ein 'X' malen
    g.setColor(Color.RED);
    g.drawLine(x, y, x+20, y+20);
    g.drawLine(x-1, y, x+19, y+20);
    g.drawLine(x+20, y, x, y+20); 
    g.drawLine(x+19, y, x-1, y+20);
  }
```

Liebe Grüße
Reality


----------



## Anubis (1. Okt 2004)

Leider kenne ich keine.


----------



## Griffin (1. Okt 2004)

Als ich den Code ausprobiert habe (mit korrigierten Stellen) bewirkt bei mir folgende Zeile nichts (auch mit andern Farben nicht):

```
contentPane.setBackground(Color.WHITE);
```
Nur weiss ich nicht wie man das ändern kann.
Sowieso ist mir der Konstrukto bischen rätselhaft.


----------



## Beni (1. Okt 2004)

> Kennst du eine Möglichkeit die Linien dicker zu zeichnen?



Verwende Graphics2D. Dort kannst du ein "Stroke" (am einfachsten ein BasicStroke) setzen, welches das Zeichenverhalten von Shapes beeinflusst. Und eine Linie kann man mit einer "Line2D" (ein Shape) zeichnen...


----------



## Reality (1. Okt 2004)

Griffin hat gesagt.:
			
		

> Als ich den Code ausprobiert habe (mit korrigierten Stellen) bewirkt bei mir folgende Zeile nichts (auch mit andern Farben nicht):
> 
> ```
> contentPane.setBackground(Color.WHITE);
> ...



Jo, das ist mein 2. Problem mit dem ich mich am Schluß beschäftige. Es sei denn, jemand hat sofort eine Lösung parat.



> Verwende Graphics2D. Dort kannst du ein "Stroke" (am einfachsten ein BasicStroke) setzen, welches das Zeichenverhalten von Shapes beeinflusst. Und eine Linie kann man mit einer "Line2D" (ein Shape) zeichnen...



Danke, werde ich mir auch am Schluß anschauen.

Liebe Grüße
Reality


----------

