# Koordinatensystem, bitte Hilfe!



## DjBinIchNicht (15. Mrz 2010)

Kann mir bitte bitte einer bei dieser Aufgabe helfen:
Erstellen Sie eine Java.Applikation, mit der ein Koordinatensystem konstruiert werden kann.
Dazu soll zunächst ein Zeichnungsrahmen in der Größe 340x340 Pcx² auf Ihrem 500 x 500 Pcx² großen Frame konstruiert werden, der die Zeichnung später aufnehmen soll.
Als "echte" Zeichnungsfläche soll nun ein 300 x 300 Pcx² großer Bereich zur Verfügung stehen (also 20 Pcx umlaufender Rand!).
In diese Zeichnungsfläche konstruieren Sie nun ein kartesisches Koordinatensystem mit Achsenspitzen und einer Beschriftung der Achsen.
Setzten Sie dazu zunächst als Attribute der Klasse alle erfordelichen Werte und realisieren Sie anschließend die notwendigen Methoden. 
Oberhalb der Zeichnungsrahmens sollen alle Welt-Koordinaten (die Sie selbst festlegen) dokumentiert werden.


Ich bitte um hilfe, maybe kann mir einer auch noch hier n kleinen Crash kurs geben, hoffe dass ist nicht zu schwer. Ich kenn mich nicht soooooo gut damit aus.
Tausend dank für die Mühe im vorraus!
Gruß


----------



## madboy (15. Mrz 2010)

java-forum.org hat gesagt.:
			
		

> Wir machen keine Hausaufgaben, aber wir helfen dabei


Hast du konkrete Fragen?


----------



## DjBinIchNicht (15. Mrz 2010)

ja tut mir leid ich bin voll eingerostet, wie sieht überhaupt der aufbau aus?


----------



## madboy (15. Mrz 2010)

```
/**
* Mein tolles Koordinatensystem. Es kann ABC aber auch XYZ! Juhuuu!
*/
public class Koordinatensystem
{
  //deine Methoden, Konstruktor etc. hier

  public static void main(String[] args)
  {
    new Koordinatensystem();
  }
}
```
:question:


----------



## Dow Jones (22. Mrz 2010)

Besonders präzise ist die Fragestellung zwar nicht, aber ich versuche mal etwas sinnvolles dazu zu schreiben:



DjBinIchNicht hat gesagt.:


> Dazu soll zunächst ein Zeichnungsrahmen in der Größe 340x340 Pcx² auf Ihrem 500 x 500 Pcx² großen Frame konstruiert werden, der die Zeichnung später aufnehmen soll.


Also wenn du den Frame bereits hast dann müsstest du ja nur noch die Zeichenfläche (s.u.) und eine (Text?)-Komponente zur Anzeige der Weltkoordinaten hinzufügen. Für besagte Textkomponente kämen JLabel, JTextArea und noch ein paar andere in Frage. Da musst du halt mal schauen was sich für deine Zwecke eignet.
Besonders guter Stil ist es übrigens für die ganzen grafischen Elemente einen Layoutmanager zu verwenden. 

Für die Zeichenfläche kann man prima ein JPanel verwenden. Dazu würde ich eine Klasse _Zeichenflaeche_ erstellen die von JPanel erbt. Dann würde ich den Konstruktor sowie die PaintComponent Methode überschreiben und nach belieben noch eigene Methoden hinzufügen. Innerhalb von PaintComponent kann man dann den "Hintergrund" der Zeichenflaeche erzeugen, also zum Beispiel die Achsen samt Beschriftung (siehe dazu die Methoden Paint bzw. PaintComponent. Mit dem Graphics-Object, das man dabei erhält, lassen sich leicht Linien, Text, Kreise und ähnliches zeichnen).

Das Zeichenflächen-JPanel könnte dann in etwa so aussehen:








```
package kosystem;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Zeichenflaeche extends JPanel {

    private int xMin, xMax, yMin, yMax;
    private String xText, yText;

    public Zeichenflaeche() {
        super();
        xMin = -10;
        xMax = 20;
        yMin = -10;
        yMax = 50;
        xText = "x-Achse";
        yText = "y-Achse";
        setPreferredSize( new Dimension(340, 340) );
        // der Border dient nur dazu die Grenzen des Panels sehen zu koennen
        setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    }

    public void setAchsenbeschriftung(String xAchsentext, String yAchsentext) {
        xText = xAchsentext;
        yText = yAchsentext;
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // zeichne einen Rand um das Koordinatensystem
        g.setColor(Color.BLACK);
        g.drawRect(20, 20, 300, 300);

        // berechne position des Ursprungs
        int ux = (300 / (xMax - xMin)) * -xMin;
        int uy = 300 - (300 / (yMax - yMin) * -yMin);

        // zeichne Achsen
        g.setColor(Color.RED);
        g.drawLine(ux+20, 0+20, ux+20, 300+20);
        g.drawLine(0+20, uy+20, 300+20, uy+20);
        g.drawString("0/0", ux+10+20, uy+15);
        g.drawString(xMin+"", 0+20, uy+15);
        g.drawString(xMax+"", 300, uy+15);
        g.drawString(yMax+"", ux+10+20, 20+15);
        g.drawString(yMin+"", ux+10+20, 300+15);

        // beschrifte Achsen
        g.setColor(Color.BLUE);
        g.drawString(xText, 10+20, uy);
        g.drawString(yText, ux, 20+40);
    }
}
```

Hoffe das hilft dir als Einstieg.


----------



## agentone (22. Mrz 2010)

Wieder mal ein typischer Fall für: Wir machen keine Haus-Aufg, aber wir helfen dir dabei.

Da wäre erstmal die Frage, was kannst du schon alles programmieren?
-prozedural?
-objektorientiert?
-welche java.packages kennst du schon? java.lang, java.awt, javax.swing, java.util ?

Ohne dein tatsächliches Problem zu kennen, kann dir auch niemand wirklich helfen. Wenn es nämlich nur darum geht, ob man besser AWT oder Swing verwenden sollte... Aber es scheint, du hast von beidem noch nicht mal gehört.

Also erzähl mal ein bisschen was!


----------

