Swing Infinite repaint loop unterbrechen

Status
Nicht offen für weitere Antworten.

ATreus

Mitglied
Hallo,

ich habe hier mal ein Beispiel, wo ich aus einem Panel, die repaint() Methode einer eigenen, leeren GlassPane aufrufe. Dies führt zu einer unendliche repaint() Schleife.

MainFrame:
Java:
public class Test extends JFrame {

	/**
	 * Launch the application
	 * @param args
	 */
	public static void main(String args[]) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Test frame = new Test();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame
	 */
	public Test() {
		super();
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		TestGlassPane testGlassPane = new TestGlassPane();
		TestPanel testPanel = new TestPanel(testGlassPane);
		add(testPanel);
		this.setGlassPane(testGlassPane);
		this.getGlassPane().setVisible(true);
		testPanel.repaint();
	}

}

Panel:
Java:
public class TestPanel extends JPanel {

	JComponent glassPane;

	public TestPanel(JComponent glassPane) {
		this.glassPane = glassPane;
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		this.glassPane.repaint();
	}
}

GlassPane:
Java:
public class TestGlassPane extends JComponent {

}

Meine Frage ist, was passiert hier und wie kann ich den Loop unterbrechen?
Vielen Dank im Voraus.

Grüße,
Andreas
 

ATreus

Mitglied
:D
Ich glaube, ich muss weiter ausholen. Auf der GlassPane sowie auf dem Panel werden Grafiken dargestellt (irgendwelche Java2d Sachen). Um Jetzt die durch das Panel übermalten Teile neu zeichnen zu lassem, muss ich die GlassPane ebenso neu zeichnen lassen. Das ist der Sinn dieser Konstruktion.
 

dayaftereh

Top Contributor
Die repaint() Methode ruf die paintComponet Methode auf = unentlich schleife!

Addest du das GlassPanel auf des Panel? wenn ja musst du nur das Panel neu zeichne also auf dem Panel Repaint aufrufen!

Außerdem brauchst du nicht repaint für jedes Panel aufrufen nach der hinzufügung von Componeten, setVisible = true ruft repint auf!

MainFrame:
[java=32]testPanel.repaint();//weg [/code]
Wegen:[java=12] frame.setVisible(true);[/code]

Ich würde es so machen, mir das ContentPanel vom JFrame hollen, dass zu eine JPanel Casten und dan das glassPanel und testPanel drauf adden und dan die piantComponent methode beider jpanels überschieben um Bilder oder Grafiken darzu stellen, wenn jetzt eine Veränderung statt gefunden hat, einfach auf dem ContenPanel repaint aufrufen, dan werden beide panels neu gezeichnet!
 
Zuletzt bearbeitet:

ATreus

Mitglied
Ich würde es so machen, mir das ContentPanel vom JFrame hollen, dass zu eine JPanel Casten und dan das glassPanel und testPanel drauf adden und dan die piantComponent methode beider jpanels überschieben um Bilder oder Grafiken darzu stellen, wenn jetzt eine Veränderung statt gefunden hat, einfach auf dem ContenPanel repaint aufrufen, dan werden beide panels neu gezeichnet!

Das Problem ist jetzt, wenn auf der Contentpane aber viele Container hängen, welche sich zeitweise ändern und immer am obersten Frame ein repaint ausgelöst wird, leider die Performance extrem einbricht.
 

Marco13

Top Contributor
Hast du dort, wo die Notwendigkeit zum Neuzeichnen festegstellt wird, nicht die Möglichkeit, explizit das Panel UND die GlassPane neuzeichnen zu lassen?

EDIT: Alternativ könnte man sich überlegen, ob man was mit dem Überschrieben einer repaint-Methode aus dem Panel erreichen kann, im Stile von
Code:
class TestPanel extends JPanel
{
    JComponent glassPane; 

    @Override
    public void repaint(...)
    {
        super.repaint(...);
        glassPane.repaint(...);
    }
}
aber das ist SEHR DIFFIZIL - bitte NICHT einfach so machen...
 
Zuletzt bearbeitet:

ATreus

Mitglied
Wenn ich die Glasspane des Topframes repainte, fühlt sich Swing genötigt, auch alle Komponenten, welche auf der Contentpane sitzen, neu zu zeichnen. Dies führt ebend zu dem loop. -> :(
 
S

SlaterB

Gast
es kann keinen loop geben, weil der repaint()-Aufruf innerhalb von paintComponent keinen Sinn macht,
der muss als erstes raus, danach kann man anfangen nachzudenken,

was du bezweckst isr glaube ich noch nicht ganz klar,
vielleicht etwas in der Richtung von

repaintAnwendungTeilX() {
panelXY.repaint();
glassPane.repaint();
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JavaFX FadeTransition: setOnFinished bei Infinite Loops AWT, Swing, JavaFX & SWT 0
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
D Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
F "Verrutschen" von Komponenten bei repaint() AWT, Swing, JavaFX & SWT 9
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben