2017-02-15 4 views
0

Я видел другие вопросы и ответы, и я сделал то же самое, что и они, но я не могу понять, почему моя программа не будет работать. Я протестировал код, и он работает нормально, пока он не отобразит изображение. Он даже изменяет строку imageNumber на имя изображения, но не отображает его. Вот что у меня есть:Программа не отображает фотографии, и я понятия не имею, почему

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

Вы никогда не меняете «значок» метки в методе 'actionPerformed' – MadProgrammer

ответ

0

Я уверен, что вы забыли на самом деле загрузить изображение

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

после переключателя/сазе.

+0

' image.setIcon (новый ImageIcon (imageNumber) 'будет проще и менее проблематичным ... таким образом, OP не заканчивается десятки ярлыков на экране: P – MadProgrammer

+0

Это тоже работает, я просто не использовал JFrame в течение длительного времени и не понимал, что это доступный метод: P – Nepromine

+0

Под вашим ответом есть ссылка для редактирования, чтобы изменить ее в случае вы видите способ улучшить свой ответ. –

Смежные вопросы