Swing JPanels werden ständig gezeichnet

JensArpe

Mitglied
Hey,

ich habe eine Applikation in Swing geschrieben. Es werden unter anderem 3 Panels hinzugefügt, auf denen ich die paintComponent()-Methode überschreibe um darauf zu zeichnen. Das Zeichnen beginnt allerdings erst, wenn ich auf einen Knopf drücke. Klappt auch alles wunderbar. Nur bin ich jetzt durch ein zufälliges System.out darauf gestoßen, daß bei allen 3 Panels die ganze Zeit die paintComponent-Methode aufgerufen wird. Und das obswohl ich nichts mache.. Das Zeichnen startet erst wenn ich auf den Knopf drücke.. Das Fenster wird nicht verändert.. Ich starte das Programm und gut wars..

Ist es normal, daß paintComponent die ganze Zeit aufgerufen wird? So wie ich es verstanden habe, wird das ja eigentlich nur ausgelöst, wenn auch wirklich die Notwendigkeit besteht es nochmal neu zu zeichen.

Oder was könnte sonst noch der Grund dafür sein?

Wäre für jede Anregung dankbar.
 

Michael...

Top Contributor
Ist es normal, daß paintComponent die ganze Zeit aufgerufen wird?
Nein.
So wie ich es verstanden habe, wird das ja eigentlich nur ausgelöst, wenn auch wirklich die Notwendigkeit besteht es nochmal neu zu zeichen.
Prinzipiell: Ja.
Oder was könnte sonst noch der Grund dafür sein?
Dein Vorgehen beim Zeichnen ist falsch. Ohne Code kann man aber nicht viel dazu sagen.
 

JensArpe

Mitglied
Ok..

paintComponent in meinem Panel:

Java:
public class GesamtansichtPanel extends JPanel implements MouseListener {
...
 protected void paintComponent(Graphics g) {       
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);
        setFont(new Font("Verdana", 12, 12));
        g2.drawString(String.valueOf(stammdate.getInterneGatewayID()), 5, 15);
        g2.drawString(String.valueOf(stammdate.getBezeichnung()), 5, 45);
        g2.draw(new Line2D.Double(0, 20, getWidth(), 20));
    }
...
}


und die werden dann in meinem Hauptfenster einem Panel hinzugefügt und angezeigt. (Was auch geht... nur wird halt ständig neu gezeichnet). Untenstehender Code ist teil einer Funktion, die nur einmal aufgerufen wird, wenn ich nen Knopf drücke.

Java:
...
for (i = 0; i < tempList.size(); i++) {
            Stammdaten tempList2 = (Stammdaten) tempList.get(i);
            GesamtansichtPanel temp = new GesamtansichtPanel(tempList2);
            temp.setSizeOwn((int) panelsizeXaktuell, (int) panelsizeYaktuell);
            temp.setBorder(new EtchedBorder(Color.white, Color.black));
            temp.setZustandsfarbe(1);
            temp.addMouseListener(temp);
            temp.setToolTipText("Bezeichnung : " + tempList2.getBezeichnung() + "\n" + " Baujahr: " + tempList2.getBaujahr());
            jPanel12.add(temp);
            panelArrayList.add(temp);
 }
 jPanel12.updateUI();
...

hoffe das hilft weiter
 

jgh

Top Contributor
Java:
GesamtansichtPanel temp = new GesamtansichtPanel(tempList2);
 temp.addMouseListener(temp);

ich behaupte mal, das liegt daran...
 

JensArpe

Mitglied
Ich habe grade mal getestet. Die Schleife wird nur genau 2 mal durchlaufen. Den MouseListener hab ich mal auskommentiert. Aber immer noch mit dem selben Ergebniss.
 
S

SlaterB

Gast
ich glaube, hier kommen wir ohne ein gepostetes vollständiges Testprogramm nicht weiter
 

JensArpe

Mitglied
Hier mal ein TestProgramm:


Die Klasse zeigt das Fenster an und malt dann das Panel drauf.

Java:
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainFrame extends JFrame {
	JPanel jPanel12;
	static int f = 0;

	public MainFrame() {
		jPanel12 = new JPanel();
		this.add(jPanel12);
		this.setSize(200, 200);
		for (int i = 0; i < 2; i++) {
			System.out.println(f++);
			GesamtansichtPAnel temp = new GesamtansichtPAnel();
			temp.addMouseListener(temp);
			temp.setToolTipText("Bezeichnung : \n Baujahr: ");
			jPanel12.add(temp);
		}
		jPanel12.updateUI();
	}
	
	public static void main(String[] args) {		
		java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new MainFrame().setVisible(true);
            }
        });
	}
}

Das Panel:

Java:
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Line2D;
import javax.swing.JPanel;

public class GesamtansichtPAnel extends JPanel implements MouseListener {   

    public void mouseClicked(MouseEvent me) {
        if (me.getClickCount() == 2) {
            System.out.println("doppelKlick");
        } else {
        	System.out.println("einfachKlick");
        }
    }

    public void mouseExited(MouseEvent me) {
    }

    @Override
    public boolean mouseDown(Event event, int i, int i1) {
        return super.mouseDown(event, i, i1);
    }

    @Override
    public boolean mouseDrag(Event event, int i, int i1) {
        return super.mouseDrag(event, i, i1);
    }

    @Override
    public boolean mouseExit(Event event, int i, int i1) {
        return super.mouseExit(event, i, i1);
    }

    @Override
    public boolean mouseEnter(Event event, int i, int i1) {
        return super.mouseEnter(event, i, i1);
    }

    public void mouseEntered(MouseEvent me) {
    }

    @Override
    public boolean mouseMove(Event event, int i, int i1) {
        return super.mouseMove(event, i, i1);
    }

    public void mousePressed(MouseEvent me) {
    }

    public void mouseReleased(MouseEvent me) {
    }

    @Override
    public boolean mouseUp(Event event, int i, int i1) {
        return super.mouseUp(event, i, i1);
    }

    @Override
    public void setSize(int i, int i1) {
        super.setSize(i, i1);
    }

    @Override
    protected void paintComponent(Graphics g) {
        System.out.println("GesamntPanel");
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);
        setFont(new Font("Verdana", 12, 12));
        g2.drawString("ID", 5, 15);
        g2.drawString("Bezeichnung", 5, 45);
        g2.draw(new Line2D.Double(0, 20, getWidth(), 20));
    }   
}


Die Ausgabe:

Code:
0
1
GesamntPanel
GesamntPanel
GesamntPanel
GesamntPanel
GesamntPanel
GesamntPanel
GesamntPanel
GesamntPanel
GesamntPanel

.......

Die Schleife wird wie man sieht nur 2 mal aufgerufen. daran liegst nicht.. Aber es wird ständig paintComponent aufgerufen.


Wenn ich übringes den Teil

Java:
java.awt.EventQueue.invokeLater(new Runnable() {
 
            public void run() {
                new MainFrame().setVisible(true);
            }
        });

weglasse und nur ein neues Objekt anlege.. passiert übrigens das selbe.
 
S

SlaterB

Gast
ok, das hätte man doch auch am Original sehen können:
der setFont-Aufruf ist böse, diese Methode lautet:

Java:
    public void setFont(Font font) {
        Font oldFont = getFont();
        super.setFont(font);
        // font already bound in AWT1.2
        if (font != oldFont) {
            revalidate();
	    repaint();
        }
    }
aber mit Testprogramm ist es nur eine Frage von Minuten bis das allein schon durch Auskommentieren identifiziert ist,

noch zum Thema kurzes Testprogramm: die 400 MouseListener-Methoden wären in 30 sec gelöscht gewesen
 

JensArpe

Mitglied
Ich bin grade darauf gestoßen, daß wenn ich die Zeile

Java:
setFont(new Font("Verdana", 12, 12));

auskommentiere, dann wird es nicht die ganze Zeit neu gezeichnet.. doch..

a) warum wird es mit dem Aufruf immer neu gezeichnet?
b) hab ich noch 2 andere Panels mit dem selben Problem, da wird aber nie setFont aufgerufen.
 
S

SlaterB

Gast
siehe mein Posting zwischendurch ;)

> b) hab ich noch 2 andere Panels mit dem selben Problem, da wird aber nie setFont aufgerufen.

entweder werden die zusammen mit dem dritten mitgezeichnet oder: Testprogramm posten ;)
 

diel2001

Bekanntes Mitglied
Java:
        repaint();
Das ist der Grund, warum es neugezeichnet wird.
Ein repaint stößt glaube ich die Methode paintComponent an.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Swing JPanels werden nicht angezeigt! AWT, Swing, JavaFX & SWT 7
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
Weltall 7 Swing JPanels werden doppelt gezeichnet AWT, Swing, JavaFX & SWT 6
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
B viele JPanels auf JLayeredPane -> to SVG? AWT, Swing, JavaFX & SWT 15
CptK JPanels übereinander legen AWT, Swing, JavaFX & SWT 6
CptK JPanels wechseln AWT, Swing, JavaFX & SWT 2
B Minimum x und y von Children-JPanels ermitteln AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
K Swing Klassenstruktur mit mehreren JPanels AWT, Swing, JavaFX & SWT 3
S Swing Navigation durch JPanels AWT, Swing, JavaFX & SWT 0
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
S Liste von JPanels mit festen Höhen AWT, Swing, JavaFX & SWT 3
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
F Event Handling Kommunikation eines JButton ueber JPanels hinaus AWT, Swing, JavaFX & SWT 6
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
N Abspeichern eines kompletten JPanels AWT, Swing, JavaFX & SWT 57
S Swing Zwischenräume zwischen JPanels AWT, Swing, JavaFX & SWT 4
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
W Swing JFrame mit unterschiedlichen JPanels AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C klassenübergreifende JPanels auf ein JFrame AWT, Swing, JavaFX & SWT 22
X Alle Components eines JPanels Enablen AWT, Swing, JavaFX & SWT 7
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
P Swing Größe eines JPanels bestimmen (ohne Border!) AWT, Swing, JavaFX & SWT 2
0 Ausschnitt eines JPanels als Bild speichern AWT, Swing, JavaFX & SWT 4
N Richtiges einstellen der size von JPanels AWT, Swing, JavaFX & SWT 10
D LayoutManager JPanels ohne LayoutManager platzieren AWT, Swing, JavaFX & SWT 6
C Swing JList mit JPanels AWT, Swing, JavaFX & SWT 6
C Swing Inhalt eines JPanels ermitteln & bearbeiten AWT, Swing, JavaFX & SWT 5
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
N Swing GUI updaten / Aufklappbare Jpanels AWT, Swing, JavaFX & SWT 2
E Swing JPanels durch ziehen am Rand vergrößern/verkleinern?! AWT, Swing, JavaFX & SWT 2
buntuswalus Swing Datentransfer zwischen JPanels AWT, Swing, JavaFX & SWT 18
T Sichtbarmachen von Objekten auf mehreren JPanels AWT, Swing, JavaFX & SWT 2
J Swing Container innerhalb eines JPanels erfragen AWT, Swing, JavaFX & SWT 3
H Z-Order von JPanels in JFrames AWT, Swing, JavaFX & SWT 2
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
R Verschachtelte JPanels FocusTraversalPolicy AWT, Swing, JavaFX & SWT 6
L mehere JPanels auf JFrame - setVisible() funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Swing JScrollPane fasst JPanel und Groesse des JPanels soll sich aendern AWT, Swing, JavaFX & SWT 2
H Größen von JPanels,JLable und JTextfield.. AWT, Swing, JavaFX & SWT 12
H Layoutprobleme mit Jpanels AWT, Swing, JavaFX & SWT 2
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
J SWING Fenster mit mehreren JPanels (dank JLayeredPane) AWT, Swing, JavaFX & SWT 19
R Swing JPanel enthält mehrere JPanels - Positionsvergabe AWT, Swing, JavaFX & SWT 4
P verschiedene JPanels einblenden je nach auswahl AWT, Swing, JavaFX & SWT 2
R MousePosition über mehrere JPanels darstellen AWT, Swing, JavaFX & SWT 13
A Mehrere JPanels in ein JFrame AWT, Swing, JavaFX & SWT 4
R JFrame enthält JScrollPane mit JPanels AWT, Swing, JavaFX & SWT 3
R Mehrere JPanels in JScrollPane AWT, Swing, JavaFX & SWT 3
R JScrollPane, mehrere JPanels hinzufügen AWT, Swing, JavaFX & SWT 2
R Hinzufügen mehrer JPanels zu einem JFrame AWT, Swing, JavaFX & SWT 2
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
M Automatische Anpassung eines JPanels in einem JFrame AWT, Swing, JavaFX & SWT 6
M Anpassen der Größe eines JPanels (incl. gezeichneter Ampel) AWT, Swing, JavaFX & SWT 2
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hintergrundfarbe eines JPanels zurücksetzen AWT, Swing, JavaFX & SWT 12
G Alle Komponenten eines JPanels durchlaufen AWT, Swing, JavaFX & SWT 11
G MVC Modell mit JPanels? AWT, Swing, JavaFX & SWT 1
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
G mehrere JPanels untereinander ? AWT, Swing, JavaFX & SWT 2
M Wirkliche Größe eines JPanels/o.ä. ermitteln AWT, Swing, JavaFX & SWT 3
T Bisherige JFrames in JPanels oder JInternalFrames? AWT, Swing, JavaFX & SWT 2
M Minimieren von verschachtelten JPanels AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2
G Größe eines JPanels beeinflussen AWT, Swing, JavaFX & SWT 5
S Update des fensters beim Ersetzen von JPanels AWT, Swing, JavaFX & SWT 9
S Automatisches Rendern einen JPanels AWT, Swing, JavaFX & SWT 8
S Frage: Mehrere JPanels gleichen Button zuzweisen? AWT, Swing, JavaFX & SWT 10
D JTree mit JPanels als UserObjects AWT, Swing, JavaFX & SWT 4
S Stapel aus transpareneten JPanels AWT, Swing, JavaFX & SWT 2
C Verschachtelung von JPanels mit verschiedenen LayoutManager AWT, Swing, JavaFX & SWT 4
G Auf Graphic-Context eines bestimmten JPanels zeichnen AWT, Swing, JavaFX & SWT 3
S GUI, dynamisches Wechseln von JPanels in einem JFrame AWT, Swing, JavaFX & SWT 2
A dynamisch weitere jpanels untereinander hinzufügen AWT, Swing, JavaFX & SWT 10
L Probleme mit Löschen von JPanels AWT, Swing, JavaFX & SWT 2
U Jpanels auf einem Jframe austauschen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben