2D-Objekte werden nicht vollständig gezeichnet

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich möchte in einem JFrame verschiedene 2D-Objekte zeichnen. Zum Zeichnen benutze ich eine eigene Klasse, die von der Klasse JComponent abgeleitet ist. In dieser überschreibe ich die paintComponent()-Methode, die für das Zeichnen zuständig ist. Soweit so gut.
Das Problem ist aber nun, dass die dargestellten Objekte (z. B. Rechtecke, Ovale, ...) nicht vollständig gezeichnet werden. Von einem Rechteck werden nur 2 Seiten gezeichnet, die Linke und die Obere. Ein Oval z. B. hat auf der rechten und unteren Seite eine Lücke.

Habe schon alles mögliche ausprobiert, aber leider ohne Erfolg und bin für jede Hilfe und jeden Hinweis dankbar. Es scheint sich um ein generelles Probelm zu handeln, evtl. auch was mein Verständnis dafür betrifft.

Hier aber erst mal der Code (funktionsfähig), die Klasse mit der main():

Code:
package layout;

import javax.swing.JFrame;


public class GraphicsLayout extends JFrame {
//	private DrawerPainter.Shape paint;
 
	public GraphicsLayout() {
		super("GraphicsLayout");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(800, 600);
		setLayout(null);
		DrawerPainter drawerPainter = new DrawerPainter();
		drawerPainter.setLocation(10, 10);
		drawerPainter.setSize(100, 100);
		getContentPane().add(drawerPainter);
//-------------------- inner class --------------------
//		paint = drawerPainter.new Shape();
//		paint.setLocation(50, 10);
//		paint.setSize(200, 100);
//		getContentPane().add(paint);
//-------------------- inner class --------------------
	}
 
	public static void main(String[] args) {
		GraphicsLayout graphicsLayout = new GraphicsLayout();
		graphicsLayout.setVisible(true);
		graphicsLayout.repaint();
	}
}


...und die Klasse zum Zeichnen:

Code:
package layout;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.JComponent;
 
public class DrawerPainter extends JComponent {
	public DrawerPainter() {
	}
 
	protected void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		g2d.setBackground(Color.ORANGE);
		g2d.drawRect(getX(), getY(), getWidth(), getHeight());
	}
//	class Shape extends JComponent {
//		protected void paintComponent(Graphics g) {
//			Graphics2D g2d = (Graphics2D) g;
//			g2d.drawRect(getX(), getY(), getWidth(), getHeight());
//		}
//	}
}


Hoffe auf viele Hinweise/Lösungsvorschläge!
Schöne Grüße
 

Brainiac

Bekanntes Mitglied
Anonymous hat gesagt.:
Code:
g2d.drawRect(getX(), getY(), getWidth(), getHeight());

Damti zeichnest DU ein rechteck in der Breite und Höhe der Zeichenfläche. Da du auf der zeichen Fläche aber nicht bei den Koordinaten 0/0 anfängst zu zeichnen siehst Du auch nicht alles. Ersetze mal getX() und getY() durch 0, dann solltest Du es ganz sehen.
 
G

Guest

Gast
OK, hab mir schon gedacht, dass ich da irgend ein Problem mit dem Verständis hab. Ich war der Annahme mit den Methoden setLocation() und setSize() lege ich die Abmessungen des Rechtecks fest, die ich dann einfach in der paintComponent()-Methode abfrage.
Also wenn ich vom Ursprung (0|0) zeichne, wird das Objekt fast komplett gezeichnet. Es handelt sich nur noch um einen Pixel der das komplette Zeichnen verhindert (anscheinend ist das zu zeichnende Object einfach einen Pixel größer als die Zeichenfläche). Wenn ich also von Breite und Höhe je 1 Pixel abziehe erhalte ich einkomplettes Object:

Code:
g2d.drawRect(0, 0, getWidth() - 1, getHeight() - 1);

Daher noch eine Frage: Lässt sich das auch ohne diesen Behelf realisieren? Es muss doch möglich sein das Objekt ohne eine nachträgliche Korrektur zu zeichnen. Wie wird die Zeichenfläche fest gelegt?

Danke für die Hilfe!
 
B

Beni

Gast
Mit "setSize" und "setLocation" legst du die Position und Grösse der JComponent fest. Wenn du innerhalb einer Component zeichnest, beginnt das Koordinatensystem immer oben links mit 0/0, und hat eine Grösse von "getWidth"/"getHeight".

Das bedeutet, du musst dich überhaupt nicht darum kümmern, wo deine Component wie angezeigt ist, du kannst ganz lokal deine paar Striche zeichnen, und das System wird sie schon an die richtige Stelle setzen.

Bei "drawRect" ist es so, dass man mit x/y die linke obere Ecke angibt, und "x+width"/"y+height" wird die untere rechte Ecke.
Wenn deine Component nun die Breite 5 hat, ist die grösste x-Koordianten der sichtbaren Pixel 4 (weil man bei 0 zu zählen beginnt), dementsprechend musst du dem "drawRect" als Breite 4 übergeben.
 
G

Guest

Gast
Ah, ja. Jetzt wird mir das ganze klar - keine Ahnung warum ich nicht selber drauf gekommen bin. Funktioniert jetzt einwandfrei...

Vielen Dank für die Hilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
Kim_Dotcom Objekte synchronisieren Variablen Spiele- und Multimedia-Programmierung 19
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
N Helden: Verschiedene Objekte oder konkrete Unterklassen Spiele- und Multimedia-Programmierung 1
gamebreiti Wie Objekte versenden und empfangen Spiele- und Multimedia-Programmierung 4
J Objekte übereinander lagern Spiele- und Multimedia-Programmierung 1
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
Q Mehr objekte darstellen als Pixel vorhanden Spiele- und Multimedia-Programmierung 6
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
Z Objekte animieren mit Threads Spiele- und Multimedia-Programmierung 4
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
A JME3 will Blender/j3o Objekte nicht einladen Spiele- und Multimedia-Programmierung 3
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
D Objekte in weiter Entfernung flimmern / flackern Spiele- und Multimedia-Programmierung 2
G 3D-Objekte / Grafiken gesucht Spiele- und Multimedia-Programmierung 6
S Klickbare Objekte im Spiel Spiele- und Multimedia-Programmierung 8
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
L 3D Objekte in Java importieren Spiele- und Multimedia-Programmierung 2
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
T Selbst-handelnde Objekte im Client-Server Betrieb Spiele- und Multimedia-Programmierung 9
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
aze Java 3d Objekte überdecken 2d Komponenten Spiele- und Multimedia-Programmierung 7
aze Java 3D : 3D Objekte speichern und später wieder einlesen Spiele- und Multimedia-Programmierung 9
D Halbdurchsichtige Objekte Spiele- und Multimedia-Programmierung 17
F zu viele Objekte, Problem mit neuzeichnen. Spiele- und Multimedia-Programmierung 5
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
B Isometrischer KartenEditor mit Animierten Objekte Spiele- und Multimedia-Programmierung 3
J 1x Punktlicht auf 5 Objekte benutzen Spiele- und Multimedia-Programmierung 17
F Maussteuerung-gezeichnete Objekte Spiele- und Multimedia-Programmierung 4
B Objekte zur Laufzeit verändern Spiele- und Multimedia-Programmierung 3
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
J Zu viele Objekte - OutOfMemoryError Spiele- und Multimedia-Programmierung 3
L Objekte zentrieren Spiele- und Multimedia-Programmierung 2
G zur laufzeit objekte einfügen Spiele- und Multimedia-Programmierung 3
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
A Objekte nacheinander zeitgesteuert rotieren lassen Spiele- und Multimedia-Programmierung 4
H 3D Objekte ausfüllen Spiele- und Multimedia-Programmierung 3
T 3D-Objekte Laden Spiele- und Multimedia-Programmierung 3
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
G Zugriff auf einzelne Objekte Spiele- und Multimedia-Programmierung 12
M Bilder werden unscharf angezeigt Spiele- und Multimedia-Programmierung 5
S KeyEvent funktioniert nicht, wenn Buttons dem Frame hinzugefügt werden Spiele- und Multimedia-Programmierung 7
lord239123 JMonkey Schatten werden durch Terrain hindurch angezeigt Spiele- und Multimedia-Programmierung 1
V Methoden werden zwar ausgeführt führen aber nicht zum Ergebnis Spiele- und Multimedia-Programmierung 5
B LWJGL Manche Seiten werden transparent angezeigt Spiele- und Multimedia-Programmierung 2
M Minecraft Bukkit Server VM Kann nicht Vergrößert werden Spiele- und Multimedia-Programmierung 20
K Kugeln werden nicht unsichtbar Spiele- und Multimedia-Programmierung 23
R RPG soll MMORPG werden Spiele- und Multimedia-Programmierung 2
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
D LWJGL - 2D Texturen werden nicht dargestellt Spiele- und Multimedia-Programmierung 12
T lwjgl Texturen werden nicht gezeichnet Spiele- und Multimedia-Programmierung 23
A Bilder werden nicht geladen Spiele- und Multimedia-Programmierung 6
BattleMaster246 Jogl Libs werden nicht geladen Spiele- und Multimedia-Programmierung 5
D [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet Spiele- und Multimedia-Programmierung 3
E Keine Werte zum Zeichnen werden Übergeben Spiele- und Multimedia-Programmierung 3
P Verzeichnis auslesen - Dateien werden zu oft gespeichert Spiele- und Multimedia-Programmierung 6
K TransformGroup werden nicht getrennt behandelt Spiele- und Multimedia-Programmierung 2
B Problem : Variablen werden vererbt Spiele- und Multimedia-Programmierung 7
Developer_X Figuren werden nicht angezeigt (Java3D) Spiele- und Multimedia-Programmierung 5
G gif animationen werden schnell abgespielt Spiele- und Multimedia-Programmierung 4
A Werden "große Spiele" mal in Java programmiert? Spiele- und Multimedia-Programmierung 43
I Beim Picking werden alle Behaviors angesprochen Spiele- und Multimedia-Programmierung 4
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
Fabel TicTacToe MiniMax Algorithmus geht nicht Spiele- und Multimedia-Programmierung 4
ThoraxLaneus Minecraft MCP-Client mit Optifine fertig machen in IntelliJ klappt nicht ganz Spiele- und Multimedia-Programmierung 6
K Mein Jump and Run charakter bewegt sich nicht mehr rückwärts... Spiele- und Multimedia-Programmierung 0
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
D MIDIdevice open funktioniert nicht Spiele- und Multimedia-Programmierung 1
Mika_MDF Minecraft Eclipse startet Minecraft nicht? Spiele- und Multimedia-Programmierung 23
H Musik Datei lädt nicht? Spiele- und Multimedia-Programmierung 8
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
JeremyStarTM Minecraft Minecraft Spigot Server akzeptiert JAR-Version nicht Spiele- und Multimedia-Programmierung 8
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
P Teamspeak interface mit JFrame funktioniert nicht Spiele- und Multimedia-Programmierung 3
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
Z Minecraft Multiplayer geht nicht Spiele- und Multimedia-Programmierung 2
L Minecraft 1.7.10 Server startet nicht Spiele- und Multimedia-Programmierung 1
R Memory - Nicht alle Button lassen sich aktivieren? Spiele- und Multimedia-Programmierung 1
D Kollision funktioniert unten aber nicht oben Spiele- und Multimedia-Programmierung 4
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
N der Player bewegt sich nicht Spiele- und Multimedia-Programmierung 14
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
Damtonix Gameloop funktioniert nicht! Spiele- und Multimedia-Programmierung 6
N Warum tut der Gegner nicht das was er soll? Spiele- und Multimedia-Programmierung 13
N Warum ist das Fenster nicht schwarz? Spiele- und Multimedia-Programmierung 26
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
A Dateifehler - Öffnet nicht Spiele- und Multimedia-Programmierung 7
temi libGDX Box2d ApplyTorque() funktioniert nicht Spiele- und Multimedia-Programmierung 1
R Laufbewegung geht nicht.. Spiele- und Multimedia-Programmierung 1
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
M KeyListener funktioniert nicht während Timer läuft Spiele- und Multimedia-Programmierung 26

Ähnliche Java Themen

Neue Themen


Oben