2017-02-15 7 views
0

J'ai vu d'autres questions et réponses et j'ai fait la même chose qu'eux, mais je n'arrive pas à comprendre pourquoi mon programme ne fonctionnera pas. J'ai testé le code et ça fonctionne bien jusqu'à quand il devrait afficher l'image. Il change même la chaîne de imageNumber au nom de l'image, mais ne l'affichera pas. Voici ce que j'ai:Le programme n'affiche pas les images et je ne sais pas pourquoi

import javax.swing.*; 
import java.awt.event.*; 
import java.util.Random; 

public class DiceRollGUI { 

     private static JPanel panel = new JPanel(); 
     private static String imageNumber = "No Set Image"; 
     private static JLabel image = new JLabel(new ImageIcon(imageNumber)); 
     private static JButton rollDie = new JButton("Roll die"); 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Dice Roll GUI"); 
     JLabel labelOne = new JLabel("Press 'Roll' to roll the 6 sided die."); 

     rollDie.setActionCommand("Roll"); 
     rollDie.addActionListener(new Button()); 

     frame.setVisible(true); 
     frame.setSize(600, 700); 
     frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(panel); 

     panel.add(labelOne); 
     panel.add(rollDie); 
    } 

    public static class Button implements ActionListener { 

     public void actionPerformed(ActionEvent event) { 

      String command = event.getActionCommand(); 
      Random random = new Random(); 
      int randomNum = random.nextInt(6) + 1; 

      if (command.equals("Roll")) { 
       switch (randomNum) { 
        case 1: 
         imageNumber = ("dice1.png"); 
         break; 
        case 2: 
         imageNumber = ("dice2.png"); 
         break; 
        case 3: 
         imageNumber = ("dice3.png"); 
         break; 
        case 4: 
         imageNumber = ("dice4.png"); 
         break; 
        case 5: 
         imageNumber = ("dice5.png"); 
         break; 
        default: 
         imageNumber = ("dice6.png"); 
         break; 
       } 
       panel.add(image); 
       rollDie.setText("Roll Again"); 
       imageNumber = ("No Set Image"); 
      } 
     } 
    } 
} 
+0

Vous ne changez jamais le 'Icon' de l'étiquette dans votre méthode' actionPerformed' – MadProgrammer

Répondre

0

Je suis sûr que vous avez oublié de charger réellement l'image

image = new JLabel(new ImageIcon(imageNumber)); 

après l'instruction switch/case.

+0

'image.setIcon (new ImageIcon (imageNumber)' serait plus facile et moins problématique ... de cette façon, l'OP ne se retrouve pas avec des dizaines d'étiquettes à l'écran: P – MadProgrammer

+0

Cela fonctionne aussi, je n'ai pas utilisé JFrame depuis longtemps et je n'ai pas réalisé que c'était une méthode disponible: P – Nepromine

+0

Il y a un lien d'édition sous votre réponse pour le modifier dans le cas vous voyez un moyen d'améliorer votre réponse. –