2009-03-22 10 views
4

Ich muss verschiedene Zeichnungen auf einem JPanel anzeigen. Ich habe die Zeichnungsdateien in ein Array, aber wenn ich es mit einer Schaltfläche änderte, zeigt das JPanel nur die erste Zeichnung und nicht die nächste Zeichnung ...Aktualisieren JPanel

Ich habe panel.revalidate() aufgerufen aber es funktioniert nicht.

Dies ist das Segment des Codes, den ich verwendet habe, aber nicht funktioniert. Die JPanel-Anzeige war statisch.

String[] a = {"image1.txt","image2.txt","image3.txt"}; 
    List<String> files = Arrays.asList(a); 


    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == answer1){ 
     fileNumber++; 
     //call other class for painting (files=array files, fileNumber=index of the array) 
     draw = new drawingPanel(files,fileNumber); 
     panel.add(draw); 
    } 
    panel.revalidate(); 
    panel.repaint(); 
} 

Antwort

2

Sie können versuchen, einen Verweis auf Ihr drawingPanel beizubehalten und remove() auf dem vorhandenen drawingPanel aufzurufen, bevor Sie es erneut hinzufügen. Gemäß der JPanel JavaDoc ist das Layout standardmäßig FlowLayout - das wird das Bild nicht ersetzen, wie Sie beabsichtigen, sondern wird stattdessen das nächste drawingPanel rechts neben dem vorherigen plazieren. (Was passiert, wenn Sie die Größe des Fensters ändern?)

Übrigens, wie gehen Sie mit dem Fall um, wenn Sie über das letzte Bild im Array hinauskommen?

+0

Lieber Mike ... Tausend Dank für die Empfehlung des Codes remove(). Jetzt zeigt das JPanel jedes Mal eine andere Zeichnung an, wenn ich auf die Schaltfläche klicke. Oh!! Ich konnte es nicht glauben, nur ein Wort .. remove() und es kostet mich Tränen und schlaflose Nacht für so viele Tage! – Jessy

+0

Oh, ich habe es versäumt, deine Frage zu beantworten. Wenn ich das letzte Bild übergebe, füge ich den system.exit-Code hinzu, um es zu schließen. – Jessy

2

Zeigen Sie immer nur eine Zeichnung an? Wenn dies der Fall ist, sollten Sie versuchen, ein CardLayout zu verwenden, damit Sie einfach zwischen den Zeichnungen wechseln können. Ein Beispiel finden Sie in http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html.

Ich hatte ein ähnliches Problem neulich versucht, verschiedene Schaltflächen auf meiner UI dynamisch anzuzeigen abhängig davon, welche Registerkarte eines JTabbedPane der Benutzer ausgewählt. CardLayout war genau das Richtige, um die Dinge zu vereinfachen.

+0

ja, eine Zeichnung zu einer Zeit.Mein Programm ziemlich ähnlich mit dem Beispiel, das Sie vorschlagen, um zu sehen. Wie auch immer ich die Zeichnung nicht ändern kann ... das verwirrt mich so. Lassen Sie mich das Segment des Codes in Antwort zeigen. – Jessy

+0

Der Code ähnelt meinen fehlgeschlagenen Versuchen. Verwenden Sie CardLayout auf dem Panel; Jede drawingPanel-Instanzen ist eine neue Karte. Siehe http://grocerylister.cvs.sourceforge.net/viewvc/grocerylister/grocerylister/src/grocerylister/ui/MainFrame.java?revision=1.91.4.75&view=markup&pathrev=release_0_2_0_dev zum Beispiel – ssakl

+0

SO beschränkt Kommentare auf 300 Zeichen, so Ich werde hier fortfahren. Durchsuche den verlinkten Code nach "cardPanel", um zu sehen, was ich dort mache. Hoffentlich können Sie es für Ihre (etwas komplexeren) Bedürfnisse anpassen. – ssakl