2009-03-22 12 views
4

J'ai besoin d'afficher différents dessins sur un JPanel. J'ai mis les fichiers de dessin dans un tableau, mais quand je l'ai changé en utilisant un bouton, le JPanel affiche seulement le premier dessin et ne change pas au dessin suivant ...Rafraîchir JPanel

J'ai appelé panel.revalidate() , mais ça ne marche pas.

Ceci est le segment du code que j'ai utilisé mais qui ne fonctionne pas. L'affichage JPanel était statique.

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(); 
} 

Répondre

2

Vous pouvez essayer de conserver une référence à votre drawingPanel et d'appeler remove() sur le drawingPanel existant avant de l'ajouter de nouveau. Selon le JavaDoc JPanel, la mise en page est FlowLayout par défaut - ce qui ne remplacera pas l'image comme vous le souhaitez, mais placera plutôt le prochain drawingPanel à la droite de la précédente. (que se passe-t-il lorsque vous redimensionnez la fenêtre?)

Par ailleurs, comment gérez-vous le cas où vous avez dépassé la dernière image du tableau?

+0

Cher Mike ... Merci un million de suggérer le code remove(). Maintenant, le JPanel affiche un dessin différent chaque fois que je clique sur le bouton. Oh!! Je ne pouvais pas le croire juste un mot ..remove() et cela me coûte des larmes et nuit sans sommeil pour tant de jours !! – Jessy

+0

Oh, j'ai raté pour vous répondre à la question. Quand je passe la dernière image, j'ajoute le code system.exit pour le fermer. – Jessy

2

N'affichez-vous qu'un seul dessin à la fois? Si c'est le cas, vous pouvez essayer d'utiliser CardLayout, de sorte que vous pouvez facilement basculer entre les dessins. Voir http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html pour un exemple.

J'ai eu un problème similaire l'autre jour en essayant d'afficher dynamiquement différents boutons sur mon interface utilisateur en fonction de l'onglet d'un JTabbedPane que l'utilisateur a choisi. CardLayout était juste la chose pour rendre les choses faciles.

+0

oui, un dessin à la fois.Mon programme assez similaire à l'exemple que vous suggérez de jeter un oeil. Comme je ne peux toujours pas changer le dessin ... c'est tellement confus. Laissez-moi montrer le segment du code dans la réponse. – Jessy

+0

Le code est similaire à mes tentatives infructueuses. Utilisez CardLayout sur le panneau; Chaque instance de drawingPanel est une nouvelle carte. Voir 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 par exemple – ssakl

+0

SO limite les commentaires à 300 caractères, donc Je vais continuer ici. Rechercher le code lié pour "cardPanel" pour voir ce que je fais là. J'espère que vous pourrez l'adapter à vos besoins (un peu plus complexes). – ssakl