2012-03-05 92 views
0

我在一个gui中掷骰子。我得到我想要返回的数字(随机int 1-6),但我想要显示的图像没有显示出来。它第一次显示正确的图像,但从未改变它。下面是代码:JAVA。一个打印骰子的gui

public void layoutComponents() 
{ 
    Container container = frame.getContentPane(); 
    container.setLayout(new GridLayout(1, 1)); 
    diceRoll.setEditable(true); 
    container.add(button); 
    container.add(addPanel()); 
    //container.add(diceRoll); 
    frame.setSize(200, 200); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
} 

class DiceActions implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     layoutComponents(); 
     //diceRoll.append(Double.toString((int)numberRolled)); 
    } 

} 

public ImageIcon rollDice() 
{ 
    double numberRolled = (int)(Math.random() * 10 + 1); 
    ImageIcon image = dice1; 
    if (numberRolled > 6) 
    { 
     numberRolled -= 4; 
    } 
    if(numberRolled == 1) 
    { 
     image = dice1; 
     System.out.println("1"); 
     System.out.println(numberRolled); 
     return image = dice1; 
    } 
    else if(numberRolled == 2) 
    { 
     image = dice2; 
     System.out.println("2"); 
     return image = dice2; 
    } 
    else if(numberRolled == 3) 
    { 
     image = dice3; 
     System.out.println("3"); 
     return image = dice3; 
    } 
    else if(numberRolled == 4) 
    { 
     image = dice4; 
     System.out.println("4"); 
     return image = dice4; 
    } 
    else if(numberRolled == 5) 
    { 
     image = dice5; 
     System.out.println("5"); 
     return image = dice5; 
    } 
    else if(numberRolled == 6) 
    { 
     image = dice6; 
     System.out.println("6"); 
     return image = dice6; 
    } 
    else 
     System.out.println("never reached"); 
    System.out.println(numberRolled); 
    return image; 
} 

public JPanel addPanel() 
{ 
    JPanel panel = new JPanel(); 
    panel.add(new JLabel(rollDice())); 
    return panel; 
} 

public void addListeners() 
{ 
    DiceActions action = new DiceActions(); 
    button.addActionListener(action); 
} 
+0

它不断显示dice1图像 – user1198199 2012-03-05 02:16:43

+0

1)为了更好地帮助您,请发布[SSCCE](http://sscce.org/)。 2)请为代码块使用一致的逻辑缩进。 – 2012-03-05 02:23:34

+3

所以,你想让我们告诉你哪里的GUI代码是错误的,但你不给我们所有的代码。自行研究它的一种方法是将其削减为基本要素;如果你仍然没有发现你的问题,那么它可能足够小,可以发布整个事情。 – arcy 2012-03-05 02:24:03

回答

1

double numberRolled = (int)(Math.random() * 10 + 1);

我不知道它(我的意思是,JVM如何处理它),但它可能会导致因而造成一些问题四舍五入==操作符给虚假的。你已经将它转换为int,所以为什么不把它作为int来存储呢?

return image = dice1;return image = dice2;等等...

你为什么不干脆`返回diceX;'?不需要有本地ImageIcon变量。它可能在Java中工作,因为它仍然带有= operator的C语义,但如果你不打算这样做,可能会吐出意想不到的结果。

0
double numberRolled = (int)(Math.random() * 10 + 1); 
ImageIcon image = dice1; 
if (numberRolled > 6) 
{ 
    numberRolled -= 4; 
} 

此代码未能生成uniformly random numbers。 任何使用您的代码玩游戏的人都会很快得知结果 不是随机的。

我通过Lindent运行此代码,以使其可以容忍地读取并取出 中间的一些代码;只是要注意的事情一般流程 :

ImageIcon image = dice1; 

if (numberRolled > 6) { 
    numberRolled -= 4; 
} 
if (numberRolled == 1) { 
    image = dice1; 
    System.out.println("1"); 
    System.out.println(numberRolled); 
    return image = dice1; 
} 
/* ... */ 
else if (numberRolled == 6) { 
    image = dice6; 
    System.out.println("6"); 
    return image = dice6; 
} else 
    System.out.println("never reached"); 

System.out.println(numberRolled); 
return image; 

请注意,你已经初始化imagedice1。这可能是一个不好的主意,因为它使查找bug变得非常困难。相反, 将其初始化为null,这样如果代码的其余部分没有正确设置 的值,您的其他代码将死于悲惨的 死亡(NullPointerException)。

但扔掉整件事;你想要做的是使用数组至 存储模具图像和值之间的关系。代码的1/6将是 ,更少的越野车,并且更容易延伸到十个,十二个或者十二个面。