eigene paintComponent(Graphics) kommt mit rezise nicht klar

Status
Nicht offen für weitere Antworten.

hupfdule

Top Contributor
Hi,

ich habe eine Komponente, die einen Pfeil zeichnen soll. Dieser Pfeil soll die Komponente immer in voller Höhe ausfüllen. Das Zeichnen selbst klappt auch wunderbar, wenn die Komponente jedoch vergrößert wird, dann überlagt sich das neu gezeichnete Bild immer mit den vorher gezeichneten. Siehe Screenshot. Der linke Teil zeigt den Pfeil nach dem ersten Zeichnen, der rechte nach einer Vergrößerung.

Folgender Code wird zum Zeichnen benutzt:
Code:
private static final int PFEIL_DICKE= 2; 
    private static final int SPITZEN_HOEHE= 12;
    private static final int SPITZEN_BREITE= 10;
    private static final Stroke STROKE_DICK= new BasicStroke(PFEIL_DICKE);
    private static final Stroke STROKE= new BasicStroke();

    private final Polygon pfeilspitze= new Polygon();
    
    @Override
    public void paintComponent(final Graphics g) {
        final Graphics2D g2= (Graphics2D) g;
        final Rectangle bounds= this.getBounds();
        final int x= (int) bounds.getX();
        final int y= (int) bounds.getY();
        final int w= (int) bounds.getWidth();
        final int h= (int) bounds.getHeight();
                        
        pfeilspitze.addPoint(y/2, h);
        pfeilspitze.addPoint(y/2 - SPITZEN_BREITE/2, h-SPITZEN_HOEHE);
        pfeilspitze.addPoint(y/2 + SPITZEN_BREITE/2, h-SPITZEN_HOEHE);
        
        //g2.clearRect(x, y, w, h);
        g2.setPaint(this.getBackground());
        System.err.println(this.getBackground());
        g2.fillRect(x, y, w, h);
        g2.setPaint(Color.BLACK);
        g2.setStroke(STROKE_DICK);
        
        g2.drawLine(y/2, 0, y/2, h-SPITZEN_HOEHE);
        g2.setStroke(STROKE);
        g2.fillPolygon(pfeilspitze);
    }

Weder das g2.clearRect(), noch das g2.fillRect() ändern etwas an dem Problem. Irgendwelche Ideen?
 

Wildcard

Top Contributor
super.paintComponent löscht den Hintergrund. Wenn es bei dir nicht funktioniert, dann hast du wo anders ein Problem.
Um dem auf den Grund zu gehen, poste ein kompilierfähiges Beispiel das dein Problem demonstriert.
 

hupfdule

Top Contributor
Wildcard hat gesagt.:
super.paintComponent löscht den Hintergrund. Wenn es bei dir nicht funktioniert, dann hast du wo anders ein Problem.
Davon bin ich ausgegangen.
Um dem auf den Grund zu gehen, poste ein kompilierfähiges Beispiel das dein Problem demonstriert.
Ist zwar nicht exakt dasselbe (der Pfeil wird nur zur Hälfte sichtbar (und ich weiß nicht wieso...), das Problem ist jedoch auch dort zu erkennen.) Einfach das Fenster etwas vergrößern und das Problem wird sichtbar.

Code:
import java.awt.*;
import javax.swing.*;

public class PfeilTest extends JFrame{
    public PfeilTest(){
        this.setLayout(new GridLayout());
        this.add(new PfeilImage());
    }
    public static void main(String[] args){
        final PfeilTest pf= new PfeilTest();
        pf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pf.setSize(50, 100);
        pf.setVisible(true);
    }
}   

class PfeilImage extends JComponent {
    
    private static final int PFEIL_DICKE= 2; 
    private static final int SPITZEN_HOEHE= 12;
    private static final int SPITZEN_BREITE= 10;
    private static final Stroke STROKE_DICK= new BasicStroke(PFEIL_DICKE);
    private static final Stroke STROKE= new BasicStroke();

    private final Polygon pfeilspitze= new Polygon();
   
    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
        final Graphics2D g2= (Graphics2D) g;
        final Rectangle bounds= this.getBounds();
        final int x= (int) bounds.getX();
        final int y= (int) bounds.getY();
        final int w= (int) bounds.getWidth();
        final int h= (int) bounds.getHeight();
                        
        pfeilspitze.addPoint(y/2, h);
        pfeilspitze.addPoint(y/2 - SPITZEN_BREITE/2, h-SPITZEN_HOEHE);
        pfeilspitze.addPoint(y/2 + SPITZEN_BREITE/2, h-SPITZEN_HOEHE);
        
        //g2.clearRect(x, y, w, h);
        g2.setPaint(this.getBackground());
        System.err.println(this.getBackground());
        g2.fillRect(x, y, w, h);
        g2.setPaint(Color.BLACK);
        g2.setStroke(STROKE_DICK);
        
        g2.drawLine(y/2, 0, y/2, h-SPITZEN_HOEHE);
        g2.setStroke(STROKE);
        g2.fillPolygon(pfeilspitze);
    }    
}
 

Wildcard

Top Contributor
Kein Wunder das es seltsam aussieht. Du fügst dem Polygon mehr und mehr Punkte hinzu.
Entweder neu erstellen, oder reset() aufrufen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M eigene GUI Bibliothek erstellen. AWT, Swing, JavaFX & SWT 10
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B Notepad++ in die eigene GUI einbinden AWT, Swing, JavaFX & SWT 7
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
T Swing Eigene Konsole AWT, Swing, JavaFX & SWT 5
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M eigene horizontale Scrollbar AWT, Swing, JavaFX & SWT 1
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
Kenan89 3D Models aus anderen Spielen in eigene einfügen AWT, Swing, JavaFX & SWT 3
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
P Eigene CMD GUI zum Starten von JAR AWT, Swing, JavaFX & SWT 10
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
K 3D-Grafik Eigene "Kamera" AWT, Swing, JavaFX & SWT 2
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
R eigene Methoden für Buttons? AWT, Swing, JavaFX & SWT 11
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
H Swing Eigene Komponente reagiert falsch auf mouseClicked() AWT, Swing, JavaFX & SWT 5
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
T SWT eigene Komponenten AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
A Eigene StatusBar AWT, Swing, JavaFX & SWT 2
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
D Eigene Methode soll Gerade zeichnen AWT, Swing, JavaFX & SWT 5
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
MrMilti eigene Klasse in JTable ablegen AWT, Swing, JavaFX & SWT 12
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
A Eigene Buttons AWT, Swing, JavaFX & SWT 20
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
S Eigene GUI (evt. Toolkit) AWT, Swing, JavaFX & SWT 10
M SWT: eigene Events AWT, Swing, JavaFX & SWT 9
& eigene Schriftart in JEditorpane AWT, Swing, JavaFX & SWT 2
T Eigene Fenster kreieren?zb. wie bei Winamp? AWT, Swing, JavaFX & SWT 9
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
M Eigene Komponenten basteln AWT, Swing, JavaFX & SWT 25
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
S Eigene Komponenten AWT, Swing, JavaFX & SWT 2
T Eigene erweiterte MouseEvents nutzen AWT, Swing, JavaFX & SWT 2
M In eigene JPanel Klasse zeichnen AWT, Swing, JavaFX & SWT 4
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
M eigene ComponentUI und Serializable AWT, Swing, JavaFX & SWT 3
E Eigene Steuerelemente bauen AWT, Swing, JavaFX & SWT 3
G fullscreen GUI - eigene components? AWT, Swing, JavaFX & SWT 2
T 4 db tabellen in einem karteireiter eigene klasse für die me AWT, Swing, JavaFX & SWT 7
S SWT Für jede gui komponente eigene methode AWT, Swing, JavaFX & SWT 2
J Eigene Fehlermeldung in AWT erzeugen AWT, Swing, JavaFX & SWT 2
D eigene SwingKonsole. AWT, Swing, JavaFX & SWT 5
I Eigene JComboBox AWT, Swing, JavaFX & SWT 10
C UIDefaults für eigene Klasse anpassen AWT, Swing, JavaFX & SWT 3
C ISelectionProvider und eigene Selections AWT, Swing, JavaFX & SWT 2
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
E Beim Schließen des Fensters eigene Funktion aufrufen AWT, Swing, JavaFX & SWT 8
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
T JFrame - eigene Titelleiste AWT, Swing, JavaFX & SWT 8
Y Eigene Komponente einfügen AWT, Swing, JavaFX & SWT 6
G Eigene Koponente erstellen AWT, Swing, JavaFX & SWT 3
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
T Eigene grafische Oberfläche 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
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben