2016-07-22 2 views
0

J'ai écrit une classe, nous appellerons cette DrawCard pour cette question, pour afficher une carte de jeu tirée au hasard dans ma classe de deck. J'ai écrit un objet graphique contenant des informations associées à une carte à jouer, costume, valeur, couleur, etc. J'initialise l'objet dans ma méthode principale et l'ajoute à un JFrame et il affiche et dessine tout à 100% correctement. J'ai ensuite ajouté une barre d'outils avec un bouton dont l'écouteur d'action est censé créer un nouvel objet DrawCard, supprimer le premier de l'image et ajouter le nouveau à l'image. Le programme compile et fonctionne très bien mais quand je clique sur le bouton, il ne dessine pas une nouvelle carte sur le cadre. Il enlèvera le premier mais ne rajoutera pas le nouveau au cadre, même si j'appelle la méthode repaint.Objet graphique Java non mis à jour?

Voici le code que j'ai dans ma méthode principale:

JFrame frame = new JFrame("Paying Card"); 
JButton button = new JButton("Button 1"); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    int width = 330; 
    int height = 500; 

    frame.setSize(width, height); 


DrawPlayingCard drawCard = new DrawPlayingCard(1, 1,width,height,1, frame); 
    JToolBar toolBar = new JToolBar("This Tool Bar Does Nothing."); 
    toolBar.add(button); 
    toolBar.addSeparator(); 


    Container contentPane = frame.getContentPane(); 
    contentPane.add(toolBar, BorderLayout.NORTH); 


    frame.add(drawCard); 
    button.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) 
     { 
      //Execute when button is pressed 
      frame.remove(drawCard); 
      frame.repaint(); 
      //method signature: 
      //public DrawPlayingCard(int x, int y, int width, int height, int arcSize, JFrame frame); 
      DrawPlayingCard drawCard2 = new DrawPlayingCard(1, 1, width, height, 1, frame); 

      System.out.println("Card drawn"); 

      frame.add(drawCard2); 



     } 
    }); 

    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

J'ai essayé d'appeler la méthode repeindre mon JFrame dans quelques endroits différents autour de la principale méthode et à l'intérieur de mon ActionListener sans chance. J'ai également essayé d'ajouter mes objets dans différents ordres mais rien ne semble fonctionner. Toute aide serait grandement appréciée!

+0

Post a [mcve] .. – user1803551

+0

J'ai fourni toutes les classes écrites dans le passé et j'ai été déclassé pour fournir trop de code avec ma question. Comment ferais-je cela sans être abattu et perdre le représentant, comme le représentant est difficile à construire ici. –

Répondre

1

En actionPerformed vous faites votre repaint avant d'ajouter la deuxième carte. Essayez d'ajouter la deuxième carte avant de la repeindre, par ex.

frame.remove(drawCard); 
DrawPlayingCard drawCard 2 = new DrawPlayingCard(1, 1, width, height, 1, frame); 
frame.add(drawCard2); 
frame.validate(); // this is what needs to be called to actually paint drawCard2 
frame.repaint(); 

EDIT: Ma réponse était incomplète. Essayez d'appeler frame.validate() avant la repeindre. Il est nécessaire pour le cadre de savoir qu'il doit peindre le nouveau composant sur repeindre. Question similaire pour la référence: repaint() in Java

+0

L'OP a écrit * "J'ai essayé d'appeler la méthode repaint sur mon JFrame dans quelques endroits différents autour de la méthode principale et dans mon actionlistener sans chance" *. Au lieu de deviner, demandez-leur s'ils n'ont pas essayé ce que vous suggérez. Avez-vous essayé vous-même et fait en sorte que cela fonctionne? – user1803551

+0

Je n'avais pas essayé leur exemple complet moi-même. Si je veux donner une suggestion ou quelque chose à essayer, devrais-je poster un commentaire? Merci! – Davis

+0

Généralement oui. Si votre réponse est fausse, elle sera justifiée. Si vous pensez avoir une idée mais ne pouvez en être sûr, demandez plus de détails à l'OP jusqu'à ce que vous ayez ce dont vous avez besoin pour écrire une vraie réponse (ce qui ne leur dit pas d'essayer, ou peut-être .. .). Je l'ai fait moi-même [ici] (http://stackoverflow.com/questions/38502480/how-to-bend-an-image-in-java) à titre d'exemple. – user1803551