ein Gesicht zeichnen

Status
Nicht offen für weitere Antworten.

kulturfenster

Bekanntes Mitglied
Hallo,

ich würde gerne ein Gesicht zeichnen, bekomme aber leider keine Zeichnung hin, dh es erscheint nur ein leeres Frame.

Sieht jemand den Fehler? Vielen Dank für Tipps!

Code:
import javax.swing.JComponent;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import javax.swing.JFrame;

public class Face extends JComponent {

	private Ellipse2D.Double kopf;
	private Ellipse2D.Double linkesAuge;
	private Ellipse2D.Double rechtesAuge;
	private Line2D.Double fresse;
	
	public Face()
	{
		kopf = new Ellipse2D.Double(50,50,100,100);
		linkesAuge = new Ellipse2D.Double(60,75,10,10);
		rechtesAuge = new Ellipse2D.Double(80,75,10,10);
		fresse = new Line2D.Double(60,90,85,90);
	}
	
	public void draw(Graphics g)
	{
		Graphics2D g2 = (Graphics2D) g;
		
		g2.draw(kopf);
		g2.draw(rechtesAuge);
		g2.draw(linkesAuge);
		g2.draw(fresse);
	}
	
	public static void main(String[] args)
	{
		JFrame frame = new JFrame("Face");
		
		frame.setSize(500,500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Face component = new Face();
		frame.add(component);
		frame.setVisible(true);
	}
}
 

André Uhres

Top Contributor
Code:
...
public class Face extends JComponent {
...
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        draw(g);
    }
}
 

Marco13

Top Contributor
... aber bitte sowas NICHT von JComponent erben lassen! (Sofern das wirklich nur gezeichnet werden soll)
 

kulturfenster

Bekanntes Mitglied
alles klar, vielen Dank!

hmm, aber wieso so kompliziert?

was ist schlecht an folgendem?:
Code:
public void paintComponent(Graphics g)
	{
		Graphics2D g2 = (Graphics2D) g;
		
		g2.draw(kopf);
		g2.draw(rechtesAuge);
		g2.draw(linkesAuge);
		g2.draw(fresse);
	}
 

Marco13

Top Contributor
Deswegen:
Code:
    private boolean isAlignmentXSet;
    private float alignmentX;
    private boolean isAlignmentYSet;
    private float alignmentY;
    protected transient ComponentUI ui;
    protected EventListenerList listenerList = new EventListenerList();
    private transient ArrayTable clientProperties;
    private VetoableChangeSupport vetoableChangeSupport;
    private boolean autoscrolls;
    private Border border;
    private int flags;
    private InputVerifier inputVerifier = null;
    private boolean verifyInputWhenFocusTarget = true;
    transient Component         paintingChild;
    private JPopupMenu popupMenu;
    private InputMap focusInputMap;
    private InputMap ancestorInputMap;
    private ComponentInputMap windowInputMap;
    private ActionMap actionMap;
    private boolean aaText;
    int ncomponents;
    Component component[] = new Component[0];
    LayoutManager layoutMgr;
    private LightweightDispatcher dispatcher;
    private transient FocusTraversalPolicy focusTraversalPolicy;
    private boolean focusCycleRoot = false;
    private boolean focusTraversalPolicyProvider;
    private transient Set printingThreads;
    private transient boolean printing = false;
    transient ContainerListener containerListener;
    transient int listeningChildren;
    transient int listeningBoundsChildren;
    transient int descendantsCount;
    transient ComponentPeer peer;
    transient Container parent;
    transient AppContext appContext;
    int x;
    int y;
    int width;
    int height;
    Color       foreground;
    Color       background;
    Font        font;
    Font        peerFont;
    Cursor      cursor;
    Locale      locale;
    transient GraphicsConfiguration graphicsConfig = null;
    transient BufferStrategy bufferStrategy = null;
    boolean ignoreRepaint = false;
    boolean visible = true;
    boolean enabled = true;
    boolean valid = false;
    DropTarget dropTarget;
    Vector popups;
    private String name;
    private boolean nameExplicitlySet = false;
    private boolean focusable = true;
    private int isFocusTraversableOverridden = FOCUS_TRAVERSABLE_UNKNOWN;
    Set[] focusTraversalKeys;
    private boolean focusTraversalKeysEnabled = true;
    Dimension minSize;
    boolean minSizeSet;
    Dimension prefSize;
    boolean prefSizeSet;
    Dimension maxSize;
    boolean maxSizeSet;
    transient ComponentOrientation componentOrientation= ComponentOrientation.UNKNOWN;
    boolean newEventsOnly = false;
    transient ComponentListener componentListener;
    transient FocusListener focusListener;
    transient HierarchyListener hierarchyListener;
    transient HierarchyBoundsListener hierarchyBoundsListener;
    transient KeyListener keyListener;
    transient MouseListener mouseListener;
    transient MouseMotionListener mouseMotionListener;
    transient MouseWheelListener mouseWheelListener;
    transient InputMethodListener inputMethodListener;
    transient RuntimeException windowClosingException = null;
    long eventMask = AWTEvent.INPUT_METHODS_ENABLED_MASK;
    private static final DebugHelper dbg = DebugHelper.create(Component.class);
    private PropertyChangeSupport changeSupport;
    boolean isPacked = false;

Das sind die Fields, die man erbt, wenn man von JComponent ableitet. Von den 100ten Methoden mal ganz abgsehen (die stören ja nicht). Dafür, dass du nur 3 Ellipsen und eine Linie zeichnen willst, ist das ziemlich viel überflüssiger Mist.

Rufe lieber von der paintComponent-Methode der Component, die das Face entahlten soll, deine (ursprüngliche!) draw-Methode auf.
 

kulturfenster

Bekanntes Mitglied
verstehe, vielen Dank!

Code:
public void paintComponent(Graphics g)
	{
		Graphics2D g2 = (Graphics2D) g;
		
		draw(g2);
	}
	
	public void draw(Graphics2D g2)
	{	
		g2.draw(kopf);
		g2.draw(rechtesAuge);
		g2.draw(linkesAuge);
		g2.draw(fresse);
	}
 

Marco13

Top Contributor
Sicher? Das gepostete sieht aus, als stünde es in einer JComponent. Muss es aber nicht. *schulternzuck*
 

André Uhres

Top Contributor
Marco13 hat gesagt.:
... aber bitte sowas NICHT von JComponent erben lassen! (Sofern das wirklich nur gezeichnet werden soll)
Bitte bring hier die Leute nicht durcheinander.
Natürlich muss es eine JComponent sein, denn das Gesicht kommt ja direkt in den JFrame:
Code:
     Face component = new Face();
      frame.add(component);

@kulturfenster: man kann selbstverständlich den Code, der in der draw Methode ist,
auch direkt in die paintComponent tun. Ich wollte einfach nur die Methoden nutzen, die schon da sind.
 

Marco13

Top Contributor
André Uhres hat gesagt.:
Bitte bring hier die Leute nicht durcheinander.
Wenn "durcheinander" so viel heißt wie "auf den richtigen Weg": DOCH :wink:

Dir ist hoffentlich klar, dass sowas dann dazu führt, dass (z.B. für ein "Zeichenprogramm") sowas geschrieben wird wie
Code:
class Linie extends JComponent { ... g.drawLine ... }
class Kreis extends JComponent { ... g.drawOval ... }
class Rechteck extends JComponent { ... g.drawRect... }
class Face extends JComponent { ... g.drawOval g.drawOval g.drawOval g.drawLine ... }

somePanel.add(new Linie(...));
somePanel.add(new Kreis(...));
somePanel.add(new Rechteck(...));
somePanel.add(new Face(...));
Derartige Ansätze habe ich schon gesehen, und das ist (sehr zurückhaltend formuliert) absoluter Bockmist. Ein "Face" besteht in diesem Fall aus 3 Ellipsen ud einer Linie, und braucht keinen VetoableChangeSupport oder HierarchyBoundsListener. Ich gehe mal stark davon aus, dass das Face wirklich nur gezeichnet werden soll, und es KEINEN Grund gibt, das von JComponent abzuleiten. Aber wenn, dann bitte konsequent
Code:
class Pixel extends JComponent { ... g.drawLine(x,y,x,y); ... }

// A line of length 4:
panel.add(new Pixel(10,2));
panel.add(new Pixel(10,3));
panel.add(new Pixel(10,4));
panel.add(new Pixel(10,5));
:wink:
 

André Uhres

Top Contributor
Das sind doch nur Unterstellungen die hier wirklich fehl am Platz sind. Es geht doch hier einfach nur um eine simple GUI mit zwei Teilen: ein JFrame mit einer JComponent. Mach doch bitte nicht gleich ein Monster oder was weiss ich daraus. Das ist imho im vorliegenden Fall nur irreführend.
Was übrigens die Reaktion von kulturfenster auch schon gezeigt hat.
 

Marco13

Top Contributor
Ich weiß nicht genau, was ich "unterstellt" habe. Worum es geht, hat der Threadersteller gesagt: Er will ein Gesicht zeichnen. Man könnte auch das Face direkt auf den Frame zeichnen, was aber auch schlecht wäre, darum hast du daraus etwas ("richtigeres") extrapoliert, wobei ich dir zustimme: Es geht nur um eine GUI mit zwei Teilen. Einen JFrame und eine JComponent. Und auf die JComponent soll ein Gesicht gezeichnet werden. Allerdings ist ein Gesicht keine JComponent, sondern einfach ein Objekt, das aus drei Ellipsen und einer Linie besteht. Naja. Wir wissen beide worum es geht. Nur in der Frage, wie die Hilfe für den Threadersteller auszusehen hat, haben wir unterschiedliche Ansichen. Aber ich kann andere Ansichten akzeptieren....
compromise.jpg

:bae:
 

André Uhres

Top Contributor
Ich meinte lediglich, du hast unterstellt, daß er vielleicht viele JComponents zum Zeichnen haben will.
Deine Warnung ist sicher gut gemeint, vielleicht an anderer Stelle auch angebracht, passt aber hier nicht :wink:
 

Marco13

Top Contributor
Das wollte ich zwar nicht unterstellen, aber man muß ja davon ausgehen, dass dort noch mehr gezeichnet werden soll, als ein Gesicht. Und wenn er für das Gesicht eine Klasse anlegt (die von JComponent erbt) dann wird er für voraussichtlich auch für jedes andere "Objekt" eine derartige Klasse anlegen. Ich finde, sowas sollte man vermeiden. Wenn das eine Face aber das einzige ist, was in dem ganzen Programm ("von Hand") gezeichnet werden soll, wäre es OK, dafür eine solche Klasse anzulegen, die dann aber nicht "Face" sondern eher "FacePaintingComponent" heißen sollte :wink:
 

André Uhres

Top Contributor
Marco13 hat gesagt.:
..dann wird er für voraussichtlich auch für jedes andere "Objekt" eine derartige Klasse anlegen..
Naja, dann sagen wir eben "prophezeien" statt "unterstellen", wenn das etwas ändert :wink:
(kulturfenster könnte klären, ob du ein wahrer Prophet bist, aber der lacht sich wahrscheinlich nur krumm über unser Spielchen)
Wie dem auch sei, das Thema ist ja jetzt abgehakt :D
Ich würde es dann einfach dabei belassen,
du kannst aber gern das letzte Wort haben (das Wort zum Sonntag :cool: ) :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ben0376 Gesicht malen Java Basics - Anfänger-Themen 6
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10
S Mehrere Zeichnungen zeichnen Java Basics - Anfänger-Themen 16
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
P Funktion zeichnen Java Basics - Anfänger-Themen 6
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
T Sterne zeichnen Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
P Kurven zeichnen Java Basics - Anfänger-Themen 5
I dauerhaftes zeichnen Java Basics - Anfänger-Themen 3
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
W Funktions-Graphen "zeichnen" Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
I Rechteck Zeichnen Java Basics - Anfänger-Themen 9
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
M Farbiges Rechteck zeichnen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben