mehrere Rechtecke mittels einem Array ausgeben

KarlPichler

Mitglied
Hallo liebe Java Experten,

ich bin neu hier. beschäftige mich den 3 tag mit java und benötige einen Denkanstoß.

Ich habe ein 2- dimensionalles Array [30][4]. Aus diesem Array möchte ich nun 30 Rechtecke mit den 4 positionswerten zeichnen.

Habe mich schon ziemlich durchgegoogelt, finde aber nichts passendes.

Danke für eure Hilfe im Voraus.
 
erstmals danke für die rasche antwort.

falls ich das richtig verstanden habe, transfomiere ich mein Positionsarray in ein RectangleArray!?
nun muss ich nur noch das RectangleArray ausgeben!

BeispielCode wäre aüßerst hilfreich! Danke
 
Ich hoffe das entspricht überhaupt dem, was du machen willst. So habe ich es zumindest verstanden. :)

Java:
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;

public class RectanglePainter
{
	private final List<Rectangle> rectangles;

	/**
	 * @param rectArray
	 */
	public RectanglePainter(int[][] rectArray) {
		this.rectangles = new ArrayList<Rectangle>();

		for(int i = 0; i < rectArray.length; i++) {
			int x = rectArray[i][0]; // X-Position
			int y = rectArray[i][1]; // Y-Position
			int width = rectArray[i][2]; // Width
			int height = rectArray[i][3]; // Height
			
			rectangles.add(new Rectangle(x, y, width, height));
		}
	}

	/**
	 * @param g
	 */
	public void paint(Graphics g) {
		for(int i = 0; i < rectangles.size(); i++) {
			Rectangle r = rectangles.get(i);
			g.drawRect(r.x, r.y, r.width, r.height);
		}
	}
}
 
Zuletzt bearbeitet:
ja das kommt ziemlich auf meine frage hin, allerdings bin ich zu dumm um dieses Snippet richtig einzusetzten.

ich erklärs mal ausführlicher:
ich versuche eine kleine Java Applikation zu schreiben mit der ich eine Bahn generieren kann. Ich habe ein Button- Menü mit der ich Bahnstücke hinzufügen kann und die Länge bzw. Krümmung eingeben kann. Diese Bahnstücke werden in einem Array abgespeichert. sections[][].

Nun möchte ich die Bahn grafisch ausgeben, mit den Werten welche im section[][] Array stehen. Diese Grafik soll nach Buttondruck aktualisiert werden, befindet sich in einem JPanel.

Wie rufe ich das Programm nun auf?

Sorry für diese dummen Fragen

danke
 
Es gibt keine dummen Fragen, nur dumme Antworten. ;)

Ich glaube am einfachsten wäre es, wenn du mal deinen bisherigen Code postest, damit ich einen besseren Überblick bekomme.
 
Code des Zeichenprogramms

package test5;
import java.awt.*;
import javax.swing.*;

public class MyPanel extends JComponent {

private static final long serialVersionUID = 1L;
public Integer[][] sectionsToDraw = new Integer[30][12];

public void paintComponent(Graphics g) {
super.paintComponent(g);
sectionsToDraw[0][0]= 40;
g.setColor(new Color(100,100,155));
g.fillRect(20,20,sectionsToDraw[0][0],20);
}
}


Aufruf
....
MyPanel drawPanel= new MyPanel();
....

if(obj == jBShow)
{
drawPanel.setPreferredSize(new Dimension(330,290));
jPImage.add(drawPanel);
jPImage.validate();
}

..l.
 
Verwende bitte das nächste mal die Code-Tags.

Also ich würde den RectanglePainter bei deiner Klasse MyPanel einfügen.
Zum Beispiel so:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;

public class RectanglePainter
{
	private List<Rectangle> rectangles;

	/**
	 * @param rectArray
	 */
	public void update(int[][] rectArray) {
		this.rectangles = new ArrayList<Rectangle>();

		for(int i = 0; i < rectArray.length; i++) {
			int x = rectArray[i][0]; // X-Position
			int y = rectArray[i][1]; // Y-Position
			int width = rectArray[i][2]; // Width
			int height = rectArray[i][3]; // Height

			rectangles.add(new Rectangle(x, y, width, height));
		}
	}

	/**
	 * @param g
	 */
	public void paint(Graphics g) {
		for(int i = 0; i < rectangles.size(); i++) {
			Rectangle r = rectangles.get(i);
			g.drawRect(r.x, r.y, r.width, r.height);
		}
	}
}

class MyPanel extends JComponent {

	private static final long serialVersionUID = 1L;
	private final RectanglePainter rectPainter = new RectanglePainter();
	
	public void setRectangleArray(int[][] rectArray) {
		rectPainter.update(rectArray);
	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		rectPainter.paint(g);
	}
}


Aufruf
....
MyPanel drawPanel= new MyPanel();
....

if(obj == jBShow)
{
	drawPanel.setPreferredSize(new Dimension(330,290));
	jPImage.add(drawPanel);
	jPImage.validate();
}
}
 
Zuletzt bearbeitet:
noch besser wären die Java-Tags mit automatischem Syntaxhighlighting, siehe meine Signatur.

Andere Frage: wozu brauchst du überhaupt ein 2dimensionales Array? Ist das eine Vorgabe? Viel sinnvoller wäre es, von Anfang an mit Rectangles zu arbeiten.
 
Es ist nötig Arrays zu verwenden, da diese "sections" auch noch andere Parameter beinhalten.
Schön langsam bin ich am verzweifelen, da das speichern, öffen alles funktioniert nur das verdammte zeichnen nicht. ich will doch nur ein Array als rechtecke ausgeben!
 
Zurück