paintComponent in Panel eines Borderlayouts hinzufügen

lela

Neues Mitglied
Hallo zusammen,
nachdem ich im Forum nichts finden konnte, was mir geholfen hat, nun die Frage an euch:
Ich habe zwei Klassen, die eine erzeugt die View, wobei für den Frame das Borderlayout gesetzt wird:
Java:
public class HilfsklasseDrawboard extends JFrame {
    @Serial
    private static final long serialVersionUID = 1L;

    private final DrawboardPlayerBoard drawboardplayerboard;

    public HilfsklasseDrawboard(){
        drawboardplayerboard = new DrawboardPlayerBoard();
    }
    
    public static void main(String[] args) {

        JFrame frame = new JFrame("BorderLayout");

        frame.setLayout(new BorderLayout());
        frame.setVisible(true);

        DrawboardPlayerBoard drawboardplayerboard = new DrawboardPlayerBoard();
        ...
        
        JPanel panelLeft = new JPanel();
        panelLeft.setSize(400,400);
        panelLeft.add(drawboardplayerboard);
        drawboardplayerboard.setVisible(true);
        ...
        Container c = frame.getContentPane();
        c.add(panelLeft, BorderLayout.WEST);
    }
}

In der Klasse DrawboardPlayerBoard wird nun die entsprechende Graphik gezeichnet, die in das linke Panel eingefügt werden soll:

Code:
public class DrawboardPlayerBoard extends JPanel {
    @Serial
    private static final long serialVersionUID = 1L;

    private Graphics2D g2D;

    public DrawboardPlayerBoard(){
    }

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g2D = (Graphics2D) g;
        g2D.setColor(Color.black);
        g2D.drawRect(160, 200, 40, 40);
        g2D.setColor(Color.gray);
        g2D.fillRect(160, 200, 40, 40);
    }
}


Was mich an der ganzen Sache wundert, ist dass tatsächlich was gezeichnet wird, aber egal, welchen Zeichenbefehl man gibt (Rechteck/Kreis, Farbe, Größe, ...), es erscheint immer nur ein kleines graues Quadrat. Deswegen bin ich etwas verwundert, weil die Zeichnung falsch übergeben wird.
Hat jemand schon mal ähnliche Erfahrungen gemacht? Ich bin langsam mit meinem Latein am Ende...
Vielen Dank schon mal für eure Ideen!
Liebe Grüße
Lela
 

KonradN

Super-Moderator
Mitarbeiter
Meine Vermutung:
Du setzt nur eine Größe bei panelLeft. Dein DrawboardPlayerBoard ist auch ein JPanel und da setzt Du keine Größe. Daher dürfte das Panel entsprechend Größe 0 haben oder so. Daher wird dies vermutlich nur so dargestellt.

Daher würde ich Dir empfehlen, da auch einmal eine Größe zu setzen. Also Größe und Position wären da das, was ich kontrollieren und setzen würde.
 

lela

Neues Mitglied
Vielen lieben Dank für die Antwort, das habe ich auch schon versucht.
Meiner Meinung müsste das ja dann eine Methode in meiner Draw-Klasse sein, die die Graphik überhaupt noch ins Panel einfügt, die so oder so ähnlich aussieht:
Java:
    public void draw(JPanel) {
        playerboardPanel.add(g2D);   
    }
Aber das funktioniert nicht, dass er auf "g2D" zugreift.
Teilweise habe ich auch das Gefühl, dass es Probleme gibt, das Gezeichnete in ein Panel einzufügen.
In einem vereinfachten Codegerüst klappt es nämlich, dass ich es einem frame hinzufüge mit der Methode getContentPane().
 

Neumi5694

Top Contributor
Vielen lieben Dank für die Antwort, das habe ich auch schon versucht.
Meiner Meinung müsste das ja dann eine Methode in meiner Draw-Klasse sein, die die Graphik überhaupt noch ins Panel einfügt, die so oder so ähnlich aussieht:
Java:
    public void draw(JPanel) {
        playerboardPanel.add(g2D);  
    }
Aber das funktioniert nicht, dass er auf "g2D" zugreift.
Teilweise habe ich auch das Gefühl, dass es Probleme gibt, das Gezeichnete in ein Panel einzufügen.
In einem vereinfachten Codegerüst klappt es nämlich, dass ich es einem frame hinzufüge mit der Methode getContentPane().
Deine Zeichenmethode in DrawboardPlayerBoard zeichnet genau das, was du siehst, das passt schon.
Wenn du was anderes zeichnen lassen willst, musst du es von der drawComponent Methode in DrawboardPlayerBoard aus aufrufen, dann kannst du auch dein g2d als Parameter weitergeben.

Um eine Grafik hinzuzufügen, brauchst du kein Graphics-Objeckt

Java:
void addImage(BufferedImage image, int x, int y) {
    this.imagesToDraw.add(...);
}

 protected void paintComponent(Graphics g){
        super.paintComponent(g);
        for (var whatever : imagesToDraw) {
            g.drawImage(...);
        }
}
Das Graphics-Objekt ist keine Eigenschaft der Komponente, sondern der Zeichenfläche, also des Bildschirms.

Ich weiß jetzt nicht, ob das auch auf dich zutrifft, aber ich hab gemerkt, dass es in den Köpfen einiger Leute noch nicht angekommen ist, dass die Grafik einer Komponente nicht irgendwo abgespeichert wird. Die Komponente wird bei jedem paingComponent() Aufruf neu gezeichnet! super.paintComponent() löscht erst mal alles raus, zeichnet Texte und Icons - sofern vorgesehen. Dann muss man noch hinzufügen, was man sonst noch haben will: jedes Mal, nicht nur einmal. D.h. fügt man eine Grafik hinzu, dann muss man die irgendwo als Icon oder Image hinterlegen, damit sie dann in der paint-Methode gezeichnet werden kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
H new Operator in paintComponent - Speicherprobleme vorprogrammiert? AWT, Swing, JavaFX & SWT 2
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
G update, paintComponent AWT, Swing, JavaFX & SWT 1
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
D PaintComponent wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
K Swing paintComponent, JPanel auslagern, ChangeEvents AWT, Swing, JavaFX & SWT 7
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
B AWT paintComponent wird nur 2 mal ausgeführt?! AWT, Swing, JavaFX & SWT 5
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
G Swing Flackern nach Override von paintComponent() AWT, Swing, JavaFX & SWT 3
M Swing paintComponent in rekusivem JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 2
M DefaultTableModel ruft paintComponent auf ! AWT, Swing, JavaFX & SWT 4
T Swing paintComponent(); AWT, Swing, JavaFX & SWT 24
K Swing JButton paintComponent überschreiben AWT, Swing, JavaFX & SWT 5
B 2D-Grafik paintComponent für rechteckigen Bereich? AWT, Swing, JavaFX & SWT 6
P Swing problem mit paintComponent AWT, Swing, JavaFX & SWT 2
K paintComponent nicht aufgerufen AWT, Swing, JavaFX & SWT 2
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
S auf paintComponent() warten AWT, Swing, JavaFX & SWT 34
W JPanel Überschreiben // paintComponent? AWT, Swing, JavaFX & SWT 4
propra Wieso wird paintComponent() beim Start 2 malausgeführt? AWT, Swing, JavaFX & SWT 4
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
P JLabel paintComponent AWT, Swing, JavaFX & SWT 3
Z Swing paintcomponent und menbar Problem AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
R 2D-Grafik auf JPanel zeichen - ohne @Override paintComponent AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent & BorderFactory AWT, Swing, JavaFX & SWT 2
A paintComponent AWT, Swing, JavaFX & SWT 4
T Rechtecke zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 3
R paintComponent direkt bei actionPerformed aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
A paintComponent() - Animation AWT, Swing, JavaFX & SWT 2
K JPanel und paintComponent AWT, Swing, JavaFX & SWT 8
E 2D-Grafik Zeichnen außerhalb der "paintComponent"-Methode? AWT, Swing, JavaFX & SWT 5
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
C Performance-Problem beim Überschreiben von paintComponent() AWT, Swing, JavaFX & SWT 2
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Game of Life - PaintComponent-Problem / Timer? AWT, Swing, JavaFX & SWT 8
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
J paintComponent() übergeben AWT, Swing, JavaFX & SWT 4
N paintComponent für Graphics ansprechen AWT, Swing, JavaFX & SWT 2
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
kodela Swing paintComponent() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 19
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
E WARUM wird paintComponent nicht aufgerufen? AWT, Swing, JavaFX & SWT 12
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
G Swing paintComponent Effizienz? AWT, Swing, JavaFX & SWT 4
R paintComponent Kollision AWT, Swing, JavaFX & SWT 2
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
A Probleme mit paintComponent() AWT, Swing, JavaFX & SWT 2
T Swing paintComponent problem AWT, Swing, JavaFX & SWT 3
MrGe getWidth(); getHeight(); außerhalb von paintComponent AWT, Swing, JavaFX & SWT 4
A paintComponent überdeckt ... AWT, Swing, JavaFX & SWT 13
JFeel-x repaint für Aufruf von paintComponent-Klasse ungeeignet? AWT, Swing, JavaFX & SWT 11
F Wer ruft paintComponent() Methode auf? AWT, Swing, JavaFX & SWT 9
@ JPanel: kein paintComponent() trotz repaint() AWT, Swing, JavaFX & SWT 4
G paintComponent Problem AWT, Swing, JavaFX & SWT 6
T paintComponent() überschreiben: Platz für Border freihalten? AWT, Swing, JavaFX & SWT 6
G paintComponent JPanel im JApplet AWT, Swing, JavaFX & SWT 2
X Speichern in der paintComponent() Methode AWT, Swing, JavaFX & SWT 15
W JLabel + paintComponent AWT, Swing, JavaFX & SWT 2
V Wieviel Logik in paintComponent? AWT, Swing, JavaFX & SWT 7
hdi super.paintComponent(g); soll nicht alles löschen AWT, Swing, JavaFX & SWT 2
G paintComponent() Methode für JPanel in NetBeans überschreibe AWT, Swing, JavaFX & SWT 2
L Problem mit paintComponent() under java < 1.6 under Windo AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
N Probleme mit paintComponent und GradientPaint AWT, Swing, JavaFX & SWT 5
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
D performance problem: paintcomponent, alphacomp, bufferedImag AWT, Swing, JavaFX & SWT 10
A Probelme mit großen BufferedImage in paintComponent AWT, Swing, JavaFX & SWT 7
C Bei Skalierung wird paintComponent() nicht aufgerufen,warum? AWT, Swing, JavaFX & SWT 4
K Problem repaint()->paintComponent AWT, Swing, JavaFX & SWT 9
G paintComponent wird nicht dargestellt AWT, Swing, JavaFX & SWT 5
T Kuchendiagramm - mit paintComponent nach JButton druck zeich AWT, Swing, JavaFX & SWT 4
R paintComponent wird anscheinend nicht aufgerufen AWT, Swing, JavaFX & SWT 2
T JPanel mit paintComponent methode im JInternalFrame AWT, Swing, JavaFX & SWT 3
M super.paintComponent(g); aufrufen oder nicht? AWT, Swing, JavaFX & SWT 8
M Unterschied zwischen paintComponent() und paint()? AWT, Swing, JavaFX & SWT 4
D JTextArea in der paintComponent () hinzufügen? AWT, Swing, JavaFX & SWT 9
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
B Schon wieder ein Problem mit paintComponent(). AWT, Swing, JavaFX & SWT 2
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben