Wieso wird mein JFrame transparent dargestellt?

stefancp

Mitglied
Hallo Leute,

ich mache gerade meine ersten Schritte in JAVA, habe ansonsten nur veraltete (aber gute) Kenntnisse in BASIC, VBA und ein bischen JS.
Nun habe ich in meinem ersten kleinen Projekt (kleines Spielchen) einen kleinen Code-Ausschnitt aus einem Tutorial kopiert und leider ist das Ergebnis scheinbar nicht richtig, denn das aufgerufenen Fenster (JFrame) wird durchsichtig dargestellt, obwohl es das nicht soll. Der Rahmen und der Inhalt (eine Linie) sind sichtbar.
Ich habe einen Screenshot angehängt, mit dem Ergebnis und darin (bzw. durch das transparente Fenster) sieht man auch den kleinen Code-Schnipsel.

Was könnte da falsch gelaufen sein?
Würde mich über Hilfe von Euch freuen!!

VG Stefan
 

Anhänge

Hallo stefancup,
ich würde drauf tippen das du ein Rechteck mit einer Frabe Zeichnest deren alpha Kanal 0 ist.

Entweder der Hintergrund das würde so aussehen:
Java:
setBackground(new Color(0,0,0,0))
oder ein Rec mit dieser Farbe in der paintComponent:
Java:
g.setColor(new Color(0,0,0,0));
g.drawLine(0,0,100,100);
 
Hallo Foxei,

danke für die schnelle Antwort, auch wenn ich erst dachte, dass es nicht hilft, weil ich tatsächlich nur eine schräge Linie zeichne, und die ja von dem Fenster kaum was verdeckt .... Aber ich habe nun mal diesen Part ...
public void paint(Graphics g)
{
g.drawLine(50,50,200,200);
}
... auskommentiert und schwupps, war das Fenster wieder gut sichtbar.
Aber wenn es mit Graphics.g nicht klappt, in einem JFrame, wie kann ich dann meine Objekte zeichnen?
 
Hallo stefancup,
die andere Möglichkeit ist dass du direkt auf der JFrame zeichnest und nicht auf einem billigen JComponenten. Das würde das Phänomen des auskommentieren erklären.

Gruß Simon
 
Du überschreibst wohl die Methode paint(Graphics) von JFrame.
Dann fehlt das super.paint(Graphics). Wenn du das nicht implementierst, dann bedeutet das, dass in dein JFrame hinein nur der Strich gezeichnet wird, sonst nichts.

Java:
public void paint(Graphics g)
{ 
    super.paint(g);
    g.drawLine(50,50,200,200); 
}
 

Zurück
Oben