Abgeleitete JComponent wird nicht gezeichnet

Hallo,

Ich habe ein Problem mit einer Klasse, die ich von JComponent abgeleitet habe. Diese enthält eigentlich nur den Konstruktor, der den Konstruktor von JComponent Aufruft und die Überschriebene Paint-Methode die (eigentlich) einen String auf dem Übergebenen Graphics Objekt zeichnen soll.

Aufgerufen wird diese Klasse von einer Von JPanel Abgeleiteten Klasse, da diese Später einiges beinhalten sollte. Diese hat wiederum nur den Konstruktor (Aufruf von
Code:
super()
) und die Methode paint. die mit
Code:
paintComponents()
die Komponenten Zeichnen soll.

Aufgerufen wird alles in einer Klasse Main mit einem dynamischen JFrame Objekt:
Java:
Mypanel p = new UMLPanel();
p.add(new ClassD(100,100));
JFrame frame = new JFrame("Test");
//frame.add(new JPanel().add(new ClassD(100,100)));
frame.add(p);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.repaint();

Nun zum Problem: Die Zeichenmethode von ClassD wird aufgerufen (Ausgabe eines Strings auf der Konsole), jedoch wird nichts gezeichnet. Der String aus der Zeichenmethode von Mypanel allerdings wird gezeichnet. Wenn ich jedoch die auskommentierte Zeile anstatt der Darunter Ausführe, also über das Standard JPanel gehe, funktioniert alles wunderbar. Der Fehler muss also in Mypanel liegen:

Java:
public class Mypanel extends JPanel
{
	
	public Mypanel()
	{
		super();
	}

	public void paint(Graphics g)
	{
		System.out.println("Panel wird gezeichnet");
		this.paintComponents(g); //ruft entsprechende Methoden auf, zeichnet jedoch nichts
		g.drawString("Von UMLPanel", 0, 10); //wird gezeichnet
	}
}

Ist wahrscheinlich eine ziemlich einfache Anfängerfrage, jedoch hab ich keine Ahnung woran das liegen könnte. Danke schonmal für eure Hilfe :)

lg,
AllBetterThanS7
 

Michael...

Top Contributor
Einen Konstruktor mit nur
Code:
super()
Aufruf, kann man sich auch sparen. Der Konstruktor der Super Klasse wird immer aufgerufen.
Bei Swing Komponenten überschreibt man die
Code:
paintComponent(Graphic)
nicht die paint, erster Aufruf darin ist üblicherweise
Code:
super.paintComponent(Graphic)
- dabei nicht mit paintComponents verwechseln.

Bei "selbstgezeichneten" Komponenten muss man u.U. die PreferredSize setzen, da einige LayoutManager sich daran bei der Darstellung orientieren.
 
Danke erstmal für die schnellen Antworten :)
Also: habe nun die funktionalität meiner paint() Methode einfach in die paintComponent() Methode pgeschrieben, ändert nichts an der Funktionalität (PaintComponent() der JComponent wird aufgerufen, allerdings nichts gezeichnet)

Das Angegebene Tutorial zeigt nur, wie ich direkt auf das Panel Zeichne, nicht jedoch eine JComponent.

Leider bin ich im Moment noch nicht weitergekommen, werde das nachher nochmals angehen.

Über weitere Tipps wäre ich sehr dankbar.
 
S

SlaterB

Gast
wieso willst du denn von JComponent erben?
im ersten Posting ging es doch auch um Mypanel, UMLPanel usw.,

JComponent sollte wohl genauso gehen,
poste ein vollständiges Codebeispiel
 
Also nochmal, habe mich vielleicht undeutlich ausgedrückt:

Ich habe eine Klasse Main, die ein Standard JFrame erzeugt, auf dem ich MEIN Panel zeichne. Dieses Panel beinhaltet mehrere Drawable Objekte, abgeleitet von JComponent, damit ich sie einfach mittels Panle.add( ... ) hinzufügen kann.

Nun meine 3 Klassen:

Klasse Main:
[Java]
package main;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{
public static void main (String args[])
{
MyPanel p = new MyPanel();
p.add(new Drawable(100,100));
JFrame frame = new JFrame("Test");
//frame.add(new JPanel().add(new Drawable(100,100)));
frame.add(p);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.repaint();
}
}
[/Java]
Klasse MyPanel:
[Java]
package main;

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

@SuppressWarnings("serial")
public class MyPanel extends JPanel
{
public MyPanel()
{
//super();
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println("UMLPanel wird gezeichnet");
paintComponents(g);
g.drawString("Von UMLPanel", 0, 10);
}

}
[/Java]
Klasse Drawable:
[Java]
package main;

import java.awt.Graphics;
import javax.swing.JComponent;

@SuppressWarnings("serial")
public class Drawable extends JComponent
{

protected double startX;
protected double startY;
protected double endX;
protected double endY;

public Drawable(double startX, double startY)
{
this.startX = startX;
this.startY = startY;
this.setSize(100, 100);
}

public void paintComponent(Graphics g)
{
System.out.println("Drawable wird gezeichnet");
g.drawString("Noch nicht implementiert", (int)startX, (int)startY);
}

}
[/Java]

Wenn ich nun [Java]frame.add(p);[/code] auskommentiere und dafür [Java]frame.add(new JPanel().add(new Drawable(100,100)));[/Java] "ausführbar" mache (Klasse main) funktioniert alles tadellos. Also muss es an meiner Klasse MyPanel liegen.

Hoffe dadurch wurden alle Unklarheiten beseitig.

lg
 
Ändert nichts. Zeichenfunktion wird aufgerufen, zeichnet aber nichts.
Wenn ich auf der Konsole die Größe der Komponente Ausgeben lasse mit getHeight() und getWidth() werden mir unterschiedliche Werte ausgegeben. Mit Standardpanel bei beidem "262", und mit eigenem Panel bei beiden "1". Klar dass der String dann nicht sichtbar ist. Nur wo liegt der Fehler?
 
S

SlaterB

Gast
> frame.add(new JPanel().add(new Drawable(100,100)));

der Rückgabewert von add() ist die zu addende Komponente selber, das entspricht also
> frame.add(new Drawable(100,100));

das ContentPane des JFrames hat BorderLayout, die einzige eingefügte Komponente wird maximiert dargestellt,
dort ist alles zu sehen

-------

wenn du erst in ein JPanel einfügst, dann gilt das Standard-FlowLayout dort,
wie die meisten Layouts ist dort setPreferredSize() wichtig, das Layout liest die gewüschte Größe und erstellt daraus die tatsächliche Größe,

setSize() selber ist leider meist wirkungslos, bei BorderLayout eh egal, nur bei null-Layout relevant,
verwirrende Verwechslung in Swing, aber es gibt nunmal die Layouts, die die wirkliche Größe kontrollieren,

-------

wenn du erst ab Position 100,100 malst, ist es ungünstig, nur eine Breite/ Höhe von 100,100 vorzugeben,
da wird dann genau außerhalb des sichtbaren Bereichs begonnen

fange mit
Java:
		setPreferredSize(new Dimension(200, 200));
		setBorder(BorderFactory.createLineBorder(Color.BLUE));
in Drawable an, bzw. zeichne sicherlich lieber ab 0,0
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
B Batik: Inhalt JComponent to SVG? AWT, Swing, JavaFX & SWT 6
Hatsi09 JComponent anklicken und "entklicken" AWT, Swing, JavaFX & SWT 7
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
S Swing Schwierigkeiten mit JComponent AWT, Swing, JavaFX & SWT 4
T Swing JComponent vergrößern AWT, Swing, JavaFX & SWT 4
L JComponent und MouseMotionListener AWT, Swing, JavaFX & SWT 2
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
W JComponent - ComponentListener - resized / moved AWT, Swing, JavaFX & SWT 5
Developer_X Wie heißt das JComponent hier? AWT, Swing, JavaFX & SWT 2
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
A JComponent Größe AWT, Swing, JavaFX & SWT 8
T jcomponent wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
N 2D-Grafik RTF in eigener JComponent AWT, Swing, JavaFX & SWT 2
D Swing JComponent zeichnen ohne sie zur Oberfläche hinzuzufügen AWT, Swing, JavaFX & SWT 2
P JComponent / JLabel drehen (Rotation) AWT, Swing, JavaFX & SWT 2
D JComponent erweitern AWT, Swing, JavaFX & SWT 4
1 JComponent -> java.lang.NullPointerException AWT, Swing, JavaFX & SWT 13
M 2x JComponent in einem JFrame darstellen? AWT, Swing, JavaFX & SWT 7
StupidAttack Animation, JComponent AWT, Swing, JavaFX & SWT 3
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
H JComponent == JTextfield? AWT, Swing, JavaFX & SWT 4
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
G JComponent nachträglich in JPanel einfügen AWT, Swing, JavaFX & SWT 5
M Ganzen Frame mit JComponent ausfüllen AWT, Swing, JavaFX & SWT 9
M JMenu teilweise unter einer JComponent AWT, Swing, JavaFX & SWT 4
I Swing JComponent als BufferedImage speichern AWT, Swing, JavaFX & SWT 18
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
T JComponent nur in Swing verwendbar? AWT, Swing, JavaFX & SWT 6
M Mehrere Icons in einer JComponent AWT, Swing, JavaFX & SWT 5
Dragonfire Image von JComponent AWT, Swing, JavaFX & SWT 2
T x und y herrausfinden eines JComponent auf JFrame AWT, Swing, JavaFX & SWT 14
J absolute Position einer JComponent ermitteln AWT, Swing, JavaFX & SWT 4
B "weiches" Bewegen von einem JComponent AWT, Swing, JavaFX & SWT 18
ARadauer JPanel vs JComponent AWT, Swing, JavaFX & SWT 2
I JDialog aus JComponent erstellen AWT, Swing, JavaFX & SWT 2
S JComponent u. JPanel ausdrucken AWT, Swing, JavaFX & SWT 3
J SWT JComponent Problem AWT, Swing, JavaFX & SWT 4
T JComponent überzeichnen? AWT, Swing, JavaFX & SWT 2
G JComponent in JTable AWT, Swing, JavaFX & SWT 8
M JComponent wird in JFrame nicht angezeigt AWT, Swing, JavaFX & SWT 4
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
S JComponent in JPanel darstellen AWT, Swing, JavaFX & SWT 2
N JComponent#getClientProperty(key) welche Schlüssel gibt es? AWT, Swing, JavaFX & SWT 3
E Drucken von JComponent. AWT, Swing, JavaFX & SWT 4
S JComponent ersetzen AWT, Swing, JavaFX & SWT 13
R Resize Problem bei JComponent AWT, Swing, JavaFX & SWT 2
M JButton in JComponent abfragen AWT, Swing, JavaFX & SWT 6
S Mausbehandlungen für JComponent AWT, Swing, JavaFX & SWT 7
M Verschiebbare JComponent AWT, Swing, JavaFX & SWT 5
C zeichnen auf jComponent AWT, Swing, JavaFX & SWT 3
S in einem JComponent zu zeichnen AWT, Swing, JavaFX & SWT 4
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
R JComponent malt seine Kinder nicht AWT, Swing, JavaFX & SWT 8
G JComponent Hintergrund AWT, Swing, JavaFX & SWT 3
M JMenu auf JComponent? AWT, Swing, JavaFX & SWT 10
G Graphics (g) und JComponent prob. AWT, Swing, JavaFX & SWT 2
G Klasse XYComponent extends JComponent AWT, Swing, JavaFX & SWT 3
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
G JavaFX LineChart Datenpunkte Markierung wird abgeschnitten AWT, Swing, JavaFX & SWT 1
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX TextArea BackgroundImage wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
S Next_Button wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 6
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
J setOnCloseRequest wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben