2016-10-12 1 views
1

Ich habe einige Probleme, ein JPanel auf meiner GUI mit Standardwerten neu zu streichen.Panel.repaint() scheint nicht zu aktualisieren Panel

Der Code, den ich jetzt unten ist mit bin, wieder, ich bin es nicht gewohnt, noch wirklich gut informiert über Java-Code, so verzeihen Sie mir Anfängerfehler für die Herstellung:

private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {           
    ... 

    pnlWagens1 = new pnlWagens(); 
    UpdateGUI(); 
}           

private void UpdateGUI(){ 
    pnlWagens1.repaint(); 
} 

Bisher ich Ich habe den obigen Code ausprobiert und JPanel auf null gesetzt, neu gezeichnet, eine neue Instanz des Panels eingefügt und erneut gezeichnet. Nichts war bisher fruchtbar, denn am Ende bin ich immer noch mit dem alten Panel (und seinen Werten) auf meiner GUI angezeigt.

Grundsätzlich mache ich zunächst ein Panel mit einem grünen Hintergrund, mache den Hintergrund rot und setze das Panel dann wieder auf einen grünen Hintergrund. Am Ende zeigt es jedoch nach dem Zurücksetzen das alte Panel mit dem roten Hintergrund an.

Jede Einsicht, was ich falsch/übersehen tun könnte, würde sehr geschätzt werden.

+1

Weitere Hilfe erhalten Sie, wenn Sie ein [minimales, vollständiges und verifizierbares Beispielprogramm] erstellen und veröffentlichen (http://stackoverflow.com/help/mcve). Wir wollen nicht Ihr gesamtes Programm sehen, sondern Sie sollten Ihren Code in das kleinste Bit, das noch kompiliert, zusammenfassen, keinen zusätzlichen Code haben, der für Ihr Problem nicht relevant ist, aber Ihr Problem immer noch demonstriert. Sie können das Problem sehr gut lösen, indem Sie einfach versuchen, den Fehler zu isolieren und zu entlarven. –

+0

Um das obenstehende für die Kürze zu übersetzen: Ich sehe Ihren Fehler im obigen Code nicht, der darauf hindeutet, dass es in Code nicht gezeigt wird. Zuerst müssen Sie den Fehler isolieren, daher ist ein [mcve] erforderlich. –

+0

Das einzige mögliche Problem ist, dass Sie ein neues pnlWagens-Objekt erstellen, also vielleicht aktualisieren Sie nicht das richtige - aber schwer zu sagen. –

Antwort

3

Angenommen, dies wird alle relevanten Code (und die UpdateGUI nicht add oder remove mit dem Panel Bezug haben Sie da nicht verwendet), dann ändern, was das Objekt pnlWagens1 zu werden in Ihrer lokalen Klasse bezieht sich nicht auf andere Referenzen ändern, die noch Beziehen Sie sich auf das alte Objekt. Das alte Objekt pnlWagens1 wird immer noch von Swing an einem anderen Ort referenziert, als Sie ursprünglich auf einem Container add aufgerufen haben.

Was Sie tun müssen, ist zu removepnlWagens1 aus dem Behälter, pnlWagens1 ändern, wie Sie es jetzt tun, re addpnlWagens1 auf den Behälter, und rufen Sie dann beide revalidate() anrufen und repaint() auf den Behälter.

+0

Das hat den Job gut gemacht! Ich hatte wirklich nicht daran gedacht, es aus dem Container zu entfernen, ich war ehrlich der Meinung, dass die Referenz einfach aktualisiert würde, wenn sie geändert würde. Vielen Dank! – Yorrick

+0

@Yorick Kein Problem. In Java werden Referenzen als Wert übergeben. Wenn Sie eine Methode aufrufen und eine Referenz übergeben, erhält die Methode tatsächlich eine Kopie der Referenz. – NESPowerGlove

Verwandte Themen