2017-02-15 133 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'方法中标签的'Icon' – MadProgrammer

回答

0

我敢肯定你忘了实际加载图像

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

开关/ case语句。

+0

'image.setIcon(new ImageIcon(imageNumber)'会更容易,问题也更少...这种方式OP不会结束屏幕上有几十个标签:P – MadProgrammer

+0

也可以工作,我很久没有使用过JFrame,也没有意识到这是一种可用的方法:P – Nepromine

+0

在您的答案下有一个编辑链接,以便在情况下进行修改你会看到改善答案的方法。 –

相关问题