Panel-Unterklasse funktioniert nicht

Archie

Mitglied
Hallo!

Hab hier ein kleines Problem und finde den Fehler einfach nicht!

Java:
import java.awt.*;

public class QProductions extends Panel{

    
    public void paint(Graphics2D g) {
        this.setBackground(Color.black);
        g.drawString("Q-Productions", 10, 10);
    }
}

Wenn ich diese Klasse in ein Frame einsetze passiert nichts. Es wird zwar das selbstentworfene Panel hinzugefügt (durch getComponentCount() erörtert) aber es zeichnet sich nicht neu.

Wenn ich das Panel hinzufüge und im Frame Quellcode *.setBackground(Color.black); ausführe funktioniert es.

Wieso aber funktioniert das nicht, wenn ich diese Befehle in der Klasse mache?

Edit: ich habe im Frame Quellcode unter anderm den *.repaint(); Befehl drinnen, dieser müsste doch auf die paint() Methode aller Componenten zugreifen.
 
S

SlaterB

Gast
immer vollständiges Testprogramm posten,
repaint() sollte nicht nötig sein wenn wie alle Komponenten am Anfang eingefügt,
wenn erst später dann ganz andere Probleme mit Layout als das ein simples repaint() reichen würde

ein Befehl wie
setBackground(Color.black);
hat übrigens nichts in paint-Methode zu suchen und ein Hintergrund wird speziell für dieses Panel vielleicht nie gemalt wenn du schon die Standard-paint-Methode ersetzt und nicht super.paint(g) aufrufst
 
G

Gast2

Gast
Schau dir deine Methoden Signatur an, die kann ich nirgends in der API finden. Außerdem setzt man den Background nicht jedesmal in der paint Methode neu ???:L
Warum benutzt du den AWT??? Benutz doch Swing
 

damtre

Aktives Mitglied
Wenn du ein Graphics2D-Objekt zum Zeichnen verwenden willst, dann solltest du dieses aus deinem Graphics Objekt erzeugen...

Du versuchst eine Methode paint(Graphics2D g) zu überschreiben die es nicht gibt. Du solltest paint(Graphics g) überschreiben. Dann kannst du dir aus deinem Graphics Objekt eine Graphics2D Instanz zaubern.


Java:
@Override
	public void paint(Graphics g){
		Graphics2D g2d = (Graphics2D)g;
	}

Das @Override validiert, ob deine Methode die du überschreiben willst auch wirklich existiert.
Das wäre bei dem Methodenparameter Graphics2D der paintroutine nämlich fehlgeschlagen und du wüsstest dass du da was falsch gemacht hast.

Und als Tipp noch. Schau dich im Internet mal nach Tutorials zum Zeichnen in Java um. ;)
 

Archie

Mitglied
Also gut hier der vollständige Code:
Java:
public class Start {

    public static void main(String[] args) {
        Spielfeld Spiel = new Spielfeld();
    }
}
import java.awt.*;

public class QProductions extends Panel{

    
    public void paintComponent(Graphics2D g) {
        g.setColor(Color.black);
        g.fillRect(0,0,this.getWidth(),this.getHeight());
        g.drawString("Q-Productions", 10, 10);
    }
    

}
import java.awt.*;
import java.awt.event.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Spielfeld {
    
    Frame HauptFenster;
    QProductions Start;
    Panel ButtonLeiste;
    Button StartButton, EndeButton;

    
    Spielfeld(){
        HauptFenster = new Frame("Programmstart");
        ButtonLeiste = new Panel();
        StartButton = new Button("Start");
        EndeButton = new Button("Ende");
        ButtonLeiste.add(StartButton);
        ButtonLeiste.add(EndeButton);
        StartButton.addActionListener(new ButtonListener());
        Start = new QProductions();
        HauptFenster.setSize(300,300);
        HauptFenster.add(ButtonLeiste,BorderLayout.SOUTH);
        HauptFenster.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                        System.exit(0);
                        }
            });
        HauptFenster.setVisible(true);
        
    }
    
    class ButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            HauptFenster.add(Start,BorderLayout.CENTER);
            HauptFenster.repaint();
            HauptFenster.setVisible(true);
        }
    }
}

Zu den anderen Fragen: Ich nutze die AWT da ich Informatik studiere und im Skript AWT behandelt wird und ich mich deshalb da ein bisschen damit spiele.

Habe in der Panelklasse setBackground durch fillRect ersetzt.
Aber mir ist aufgefallen (durch einen System.out.println("Bin jetzt hier");) dass das Programm gar nicht in die paint Methode eintritt.
 
S

SlaterB

Gast
mit richtigem paint funktionierts,
allgemein evtl. noch validate(); vor dem/ statt des repaint() aufrufen, in Swing revalidate()
 

Archie

Mitglied
Ich dachte, graphics2D erweitert graphics also müsste die paint Methode doch funktionieren. Was ist dann jetzt die richtige paint Methode?
 
S

SlaterB

Gast
vielleicht so wie im einzigen geposteten Java-Code in allen Antworten vorgegeben? ;)
steht auch in jedem Lehrbuch bzw. jedem seriösen Beispiel der Welt zum Thema Zeichen in AWT korrekt, einfach nur abschreiben..
 

Archie

Mitglied
Danke für die Hilfe. Eines möchte ich jedoch anmerken:

1. Die API ist für Java Anfänger doch sehr umfangreich und da richtig herauslesen was man jetzt braucht ist nicht sehr leicht am Anfang.

2. Bin euch dankbar für die Hilfe, aber den Unterton einiger Beiträge könnte man durchaus weglassen. Nur weil manch einer am Anfang vieleicht noch dumme Fragen stellt, muss man nicht gleich überheblich werden.
 
S

SlaterB

Gast
überlege aber auch, wie überheblich bzw. unangebracht es ist, belieben Code auszuprobieren statt konkrete Anleitungen zu lesen,
und zu dem Thema gibts nun genug sauberst formulierte deutsche Anfänger-Lehrbücher, da muss die komplizierte API nicht herhalten
 
G

Gast2

Gast
1. Die API ist für Java Anfänger doch sehr umfangreich und da richtig herauslesen was man jetzt braucht ist nicht sehr leicht am Anfang.

Jetzt mal nicht böse gemeint, du sollst die API ja nicht studieren, aber man kann ja wohl erwarten dass man in google JPanel API eingibt. Der 1. Treffer zeigt dir sofort die API Seite an und in der dann deine passende Methode suchst (Strg-f) und dir dann die Methoden Signatur anschaust, anstatt "wild" rumzuprobieren welche Paramter passen könnten^^...
 

Archie

Mitglied
Naja, in dem Kurs heisst es:"Probieren sie herum und spielen sie sich mit Java, um ein Gefühl dafür zu entwickeln."

Und das habe ich gemacht. Bin auf ein Problem gestoßen, hab selbst keine Lösung gefunden. (Denn darauf zu kommen, dass ich hier Graphics als Parameter benutzen muss, wo doch eigentlich als Parameter immer Subklassen erlaubt sind, wär ich nicht gekommen und habe demnach nicht danach gesucht.)

Aber ich werde mich hüten in Zukunft hier im Forum was zu Posten. Wusste nicht, dass man hier schon ein halber Java Profi sein muss um was fragen zu dürfen.

Sehr Einsteiger-freundliches Forum wenn einen hier die Moderatoren(!) gleich nach dem ersten Posting schon derart zurechtweisen. Der Ton macht die Musik und da muss ich sagen war der erste Ton in diesem Forum aber sehr schief.

überlege aber auch, wie überheblich bzw. unangebracht es ist, belieben Code auszuprobieren statt konkrete Anleitungen zu lesen

Und was ist bitte am Herumprobieren überheblich?

Aber danke, war mein erster und zugleich letzter Beitrag!
 
S

SlaterB

Gast
für sich Herumprobieren ist gut,
Herumprobieren und es nicht für nötig halten die Anleitung zu lesen und dann andere um Hilfe fragen ist dagegen ..
 

beastofchaos

Bekanntes Mitglied
Ich dachte, graphics2D erweitert graphics also müsste die paint Methode doch funktionieren. Was ist dann jetzt die richtige paint Methode?

Schonmal versucht bei einer Methode einen anderen Parameter anzugeben, als es gefordert ist?

Auch wenn Graphics2D eine Kindklasse von Graphics ist. Wenn Graphics2D gefordert sind und du übergibst nur Graphics(bei repaint werden nur Graphics an paintComponent() übergeben), wird das nicht automatisch gecastet! Das ginge nur andersrum, dass du Graphics2D übergibst, wenn nur Graphics gefordert sind.

Da kommst du auch schnell selber drauf, wenn du vor "public void paintComponent(Graphics g)" ein "@Override" setzt. Wenn es die Methode schon gibt, meckert der Kompiler nicht, sonst schon. Und das
Code:
super.paintComponent(g);
nicht vergessen, ne? :)

Gruß, Thomas
 
G

Gast2

Gast
Und das habe ich gemacht. Bin auf ein Problem gestoßen, hab selbst keine Lösung gefunden.
Genau dein suchen gibt mir zu Bedenken ich hab dir ganz normal im 1. Post geschrieben was falsch ist und nach was du dann selber suchen kannst. Hast du ignoriert!!! Ein bischen Eigeniniative sollte schon vorhanden sein.

Im 3ten Post steht sogar die komplett Lösung^^, die hast du ebenfalls noch erfolgreicher ignoriert was soll man dazu sagen =)?!?!

(Denn darauf zu kommen, dass ich hier Graphics als Parameter benutzen muss, wo doch eigentlich als Parameter immer Subklassen erlaubt sind, wär ich nicht gekommen und habe demnach nicht danach gesucht.)
Ach jaaa????
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
bluerob Panel im BorderLayout South wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6
A Panel zu klein AWT, Swing, JavaFX & SWT 14
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
B Panel als Bild speichern AWT, Swing, JavaFX & SWT 11
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10
M JComboBox auf GlassPane-Panel AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben