Polygon in Frame zeichnen

Graf

Neues Mitglied
Guten Abend Zusammen

Ich versuche gerade Schulaufgabe im JAVA programmieren zu lösen und kommen einfach nicht mehr weiter. Die Aufgabe besteht darin aus Inputs (Eckpunkte für ein Polygon) die Fläche zu berechnen, die Anzahl Eckpunkte sowie das eingegebene Polygon in einem Frame zu zeichnen.

Nun zu meinem Problem: Ich möchte gerne ein Polygon zeichnen mit den Eckpunkten, welche ich via Scanner einlese aber ich bringe es nicht fertig, die Array Listen in die Component Klasse zu integrieren und mit den eingegebenen Eckpunkten ein Polygon zu erstellen, welches ich zeichnen möchte.
Ich programmiere noch nicht lange und höchstwahrscheinlich mache ich etwas grundlegendes falsch:-(.

hier die drei klassen:
1. Polygon:
Java:
import java.awt.Color;
import java.awt.Graphics2D;
import java.util.ArrayList;

/**
 * A class which represents a Polygon. 
 * @author Graf
 * @Date 12.12.2010
 * Version 1.0
 */

public class Polygon {

	// Variables
	int[] xPointsArray;
	int[] yPointsArray;
	int numberOfVertexes;
	private double area;

	/**
	 * Constructor, that creates a polygon
	 * @Param vertexes (array for xpoints, array for y points and int for number of vertexes)
	 */
	public Polygon(int[] xpoints, int[] ypoints, int npoints)
	{
		xPointsArray = xpoints;
		yPointsArray = ypoints;
		numberOfVertexes = npoints;
	}

	/**
	 * Method, that computes the area of the polygon
	 * @Return area
	 */
	public double computeArea()
	{
		for (int i = 0; i <= numberOfVertexes-1; i++)
		{
			if (i == numberOfVertexes-1)
			{
				area =( area + (xPointsArray[i]*yPointsArray[0])-(xPointsArray[0]*yPointsArray[i]));
			}
			else
			{
				area =( area + (xPointsArray[i]*yPointsArray[i+1])-(xPointsArray[i+1]*yPointsArray[i]));
			}
		}

		area = area / 2;
		
		// if the area is entered counterclockwise the result will get negative but the value is correct.
		if (area < 0)
		{
			area = area * -1;
		}
		
		return area;
	}

	/**
	 * Method, that lists all vertexes of the polygon
	 * @Return Array(List) of the vertexes
	 */
	public ArrayList<String> getListPoints()
	{
		ArrayList<String> vertexes = new ArrayList<String>();
		
		for(int i = 0; i <= numberOfVertexes-1; i++)
		{
			vertexes.add(i, String.valueOf(xPointsArray[i]) + "," + String.valueOf(yPointsArray[i]));
		}

		return vertexes;
	}
	
	/**
	 * Method, that draws the polygon and fills it with an entered color
	 * @Param color
	 * @Return Polygon
	 */
	public java.awt.Polygon fill(Graphics2D g2, Color color)
	{
		java.awt.Polygon myPolygon = new java.awt.Polygon(xPointsArray, yPointsArray, numberOfVertexes);
		g2.setColor(color);
		g2.fillPolygon(myPolygon);
		g2.drawPolygon(myPolygon);
		return myPolygon;	
	}
	
	
}

2. Main:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JFrame;

public class PolygonTester {
		
	public static void main (String[] args )
	{
		// Variables
		final int xPoints_LENGTH = 499;
		final int yPoints_LENGTH = 499;
		int xPointsSize = 0;
		int yPointsSize = 0;
		double area;
		
	
		
		
		int[] xPoints = new int[xPoints_LENGTH];
		int[] yPoints = new int[yPoints_LENGTH];
		ArrayList<String> ListPoints;
		
		
		// Scanner for the x values
		System.out.println("Please enter the x points of the polygon counterclockwise. Enter finish when your done(max. 500 points): ");
		Scanner in1 = new Scanner(System.in);
		while (in1.hasNextInt())
		{
			xPoints[xPointsSize] = in1.nextInt();
			xPointsSize++;
		}
		
		// Scanner for the y values
		System.out.println("Please enter the y points of the polygon counterclockwise. Enter finish when your done(max. 500 points): ");
		Scanner in2 = new Scanner(System.in);
		while (in2.hasNextInt())
		{
			yPoints[yPointsSize] = in2.nextInt();
			yPointsSize++;
		}
		

		// creates a new polygon with the given arrays
		Polygon myFirstPolygon = new Polygon(xPoints, yPoints, xPointsSize);
		
		// computes the area of the polygon
		area = myFirstPolygon.computeArea();
		
		// gets the listpoints
		ListPoints = myFirstPolygon.getListPoints();
		
		// prints out the area and the list of the points
		System.out.println("The area of the polygon is: " + area + " square.");
		System.out.println("A list of the vertexes: " + ListPoints);
		
		//defines final variables for the pixel Size of the Frame
		final int FRAME_WIDTH = 700;
		final int FRAME_HEIGHT = 400;
		
		//constructs a new frame named frame
		JFrame frame = new JFrame();
		
		//sets the size of the frame using the defined variables FRAME_WIDTH and FRAME_HEIGHT
		frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
		
		//sets the title of the frame to an Polygon
		frame.setTitle("Polygon");
		
		//set the backgroundcolor of the frame
		frame.setBackground(Color.RED);
		
		//sets the default close operation EXIT_ON_CLOSE
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// adds the polygon to the frame
		PolygonComponent component = new PolygonComponent();
		frame.add(component);

		//sets the frame visible
		frame.setVisible(true);

	}
}

3. component:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

/**
 * A component that includes the elements of the class Polygon to draw them into a Frame.
 * @author 	Graf
 * @version 1.0
 * Date 	13.12.2010
 */

//connects the PolygonComponent class to the JComponent of the PolygonTester
public class PolygonComponent extends JComponent 
{	
	public void paintComponent(Graphics g)
	{
		// Recover Graphics2D
		Graphics2D g2 = (Graphics2D)g;
		
		// creates one House of class Polygon
		Polygon myPolygon = new Polygon(xPointsArray, yPointsArray, numberOfVertexes);
		myPolygon.fill(g2, Color.WHITE);
		
	}
}

danke vielmals für eure Hilfe
 

Marco13

Top Contributor
:noe: So viel falsch ist da jetzt eigentlich nicht. Das Polygon muss eigentlich nur an die Component übergeben werden. Im einfachsten Fall eben gleich das Polygon übergeben, und nicht die Arrays (aus denen ja dann ein neues Polygon erstellt werden müßte).

Sowas wie
Java:
class PolygonComponent extends JComponent
{
    private Polygon polygon = null;

    public void setPolygon(Polygon polygon)
    {
        this.polygon = polygon;
        repaint();
    }

    public void paintComponent(Graphics g)
    {
        // Recover Graphics2D
        Graphics2D g2 = (Graphics2D)g;

        if (polygon != null)
        {
            polygon.fill(g2, Color.WHITE);
        }

    }
}

Und oben ein
component.setPolygon(myFirstPolygon);
dazu sollte es schon tun.

BTW: Dieses Eingeben würde mir spätestens nach dem zweiten oder dritten Mal auf die Nerven gehen (oder sogar schon VOR dem ersten Mal :D ) - sowas wie
Java:
// Scannerzeugs auskommentiert
/*
        // Scanner for the x values
        ...

*/

// TODO Test:
        xPoints[0] = 100;
        xPoints[1] = 200;
        xPoints[2] = 200;
        xPoints[3] = 100;
        xPointsSize = 4;

        yPoints[0] = 100;
        yPoints[1] = 100;
        yPoints[2] = 200;
        yPoints[3] = 200;
        yPointsSize = 4;
ist doch praktisch ...
 

Graf

Neues Mitglied
Danke vielmal für die rasche Antwort. Es war genau das, was ich gebraucht habe, ich weiss auch nicht genau wieso ich nicht selbst drauf gekommen bin.

Bezüglich des Inputs: als ich mit dem Programm begonnen habe, hatte ich es Gleich wie du mir geraten hast. Später wollte ich, dass man die Ecken via Scanner eingeben kann aber ich habe die Idee wieder verworfen, da es wie du gesagt hast nur mühsam ist. Ziel war es direkt die Eckpunkte einzugeben und ich war nur soweit, dass man zuerst alle x werte und danach alle y werte eingeben konnte. Es würde den zeitlichen Aufwand sprengen die Idee mit dem Scanner zu vollenden. Danke nochmals vielmal für die Hilfe. es hat mir sehr geholfen.
 

Marco13

Top Contributor
Hmja, das Eingeben ist ja was, was man nachträglich noch "schön" machen kann. Erstmal geht es ja um die eigentliche Funktionalität, und wo diese Arrays herkommen ist dafür erstmal egal - also in der Text- und Entwicklsunsphase halt erstmal hardgecodete Dummy-Daten, und später dann irgendeine fancy Eingabe (oder sogar direkt im GUI)...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Objete von Polygon mit TreeSet verwalten Java Basics - Anfänger-Themen 1
I Vererbung Polygon erweitern ? Java Basics - Anfänger-Themen 4
F Polygon vergrößern Java Basics - Anfänger-Themen 8
S Polygon contains - Erläuterung Java Basics - Anfänger-Themen 3
K draw Polyline will nicht wie Polygon Java Basics - Anfänger-Themen 2
S Speicherbedarf Pixel vs. Polygon? Java Basics - Anfänger-Themen 7
M Polygon umkreisen? Java Basics - Anfänger-Themen 47
K Methoden contains()-Methode für Punkt in Polygon Java Basics - Anfänger-Themen 5
R Polygon erweitern Java Basics - Anfänger-Themen 10
M Polygon Punkte im Uhrzeigersinn sortieren Java Basics - Anfänger-Themen 2
E Polygon und Polyline Java Basics - Anfänger-Themen 30
K Polygon Java Basics - Anfänger-Themen 14
C Polygon um Figur bestimmen Java Basics - Anfänger-Themen 10
K Polygon in Java3D (Java 3D) zeichnen Java Basics - Anfänger-Themen 4
T Polygon.contains Fehler Java Basics - Anfänger-Themen 2
Rene_Meinhardt Polygon.Contains() funktioniert nicht richtig? Java Basics - Anfänger-Themen 3
0 problem beim Polygon zeichnen Java Basics - Anfänger-Themen 3
G bild in polygon zeichnen Java Basics - Anfänger-Themen 6
G Polygon Java Basics - Anfänger-Themen 7
I drehendes polygon Java Basics - Anfänger-Themen 4
Alex_99 Aktion ausführen wenn Frame disposed wurde Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
S GUI Frame wechseln Java Basics - Anfänger-Themen 15
C Exportierte JAR öffnet zweiten Frame nicht mehr Java Basics - Anfänger-Themen 7
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
C Erste Schritte Spieler an anderen Frame weitergeben Java Basics - Anfänger-Themen 23
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
R Erste Schritte Frame mit Ladebalken und BestätigungsButton Java Basics - Anfänger-Themen 10
das_leon Interface Frame in einem Frame (Window Builder) Java Basics - Anfänger-Themen 2
Anfänger2011 Frame zeigt nicht gewünschtes Ergebnis an ... Java Basics - Anfänger-Themen 5
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
I Methoden Schwierikeiten mit Protokollfenster (Frame Objekt) Java Basics - Anfänger-Themen 4
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
W Frame in anderer Klasse anzeigen lassen Java Basics - Anfänger-Themen 1
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
L bestimmten Frame anzeigen lassen? Java Basics - Anfänger-Themen 6
H Textfeldinhalt löschen nachdem Frame geschlossen wird Java Basics - Anfänger-Themen 8
L Kalender Java Frame Java Basics - Anfänger-Themen 7
A Frame Java Basics - Anfänger-Themen 3
P Verwirrung mit AWT Frame und main Methode Java Basics - Anfänger-Themen 19
A Frame java Java Basics - Anfänger-Themen 3
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
J Erste Schritte Speichern / Speichern unter / title Frame Java Basics - Anfänger-Themen 5
F Frame in Frame Java Basics - Anfänger-Themen 3
U GUI - resize frame Java Basics - Anfänger-Themen 13
J Open reading Frame Java Basics - Anfänger-Themen 4
J Erstelltes Frame wird nicht angezeigt Java Basics - Anfänger-Themen 2
K Frame öffnen klappt nicht?! Java Basics - Anfänger-Themen 36
JAVAnnik Anwendung nach Schließen vom letzen Frame Java Basics - Anfänger-Themen 9
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
A Frame Background Java Basics - Anfänger-Themen 21
S Klassen Klassenname = Frame? Java Basics - Anfänger-Themen 11
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
I Java - Text in neuem Frame wird nicht angezeigt Java Basics - Anfänger-Themen 4
M Frame mit mehreren areas Java Basics - Anfänger-Themen 14
B Frame über Button öffnen Java Basics - Anfänger-Themen 8
R Button soll neuen Frame öffnen Java Basics - Anfänger-Themen 21
L Variablen Frame Variablen-Schleife Java Basics - Anfänger-Themen 3
D Neues Frame öffnen Java Basics - Anfänger-Themen 7
V Frame bleibt grau Java Basics - Anfänger-Themen 5
F frame wird nicht angezeigt? Java Basics - Anfänger-Themen 10
S 2 Panels in einen Frame Java Basics - Anfänger-Themen 5
H Panels in Frame einbinden Java Basics - Anfänger-Themen 3
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
A Bild wird auf Frame nicht angezeigt! Keine Fehlermeldung Java Basics - Anfänger-Themen 3
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
T Frame öffnen Java Basics - Anfänger-Themen 6
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
I JTable in bestehenden Frame integrieren Java Basics - Anfänger-Themen 6
Y Hilfe: JOGL / OPENGL in Frame Java Basics - Anfänger-Themen 2
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
Luk10 Frame schließen Java Basics - Anfänger-Themen 2
A Frame schließen!? Help! Java Basics - Anfänger-Themen 5
A Frame reagiert nicht Java Basics - Anfänger-Themen 6
H Modalen JDialog schließen, ohne dabei das Parent-Frame zu schließen Java Basics - Anfänger-Themen 7
J Frame bleibt schwarz beim Laden Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
R Frame Inhalt ausrichten Java Basics - Anfänger-Themen 5
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Stillmatic1985 Label in einem Frame zentrieren Java Basics - Anfänger-Themen 4
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
A Java Frame per X schließen? Java Basics - Anfänger-Themen 7
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
kulturfenster Per Button Frame schliessen Java Basics - Anfänger-Themen 2
C Frame, JFrame, JDialog Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben