2012-03-05 20 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

ダイス1の画像を表示し続ける – user1198199

+0

1)すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 2)コードブロックには一貫性のある論理インデントを使用してください。 –

+3

GUIコードがどこで間違っているのかを教えてもらいたいが、すべてのコードを渡す必要はない。あなた自身でそれを研究する一つの方法は、それを本質的に切り取ることです。それでも問題が見つからない場合は、おそらく全体を投稿するのに十分な大きさになります。 – arcy

答えて

1

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

私はそれについてはよく分からない(私はJVMがそれをどのように扱うか、意味)が、それはこのように==演算子を引き起こして、いくつかの丸めの問題を引き起こす可能性があり偽を与える。あなたはint型に型キャストしました。なぜint型としても格納しないのですか?

return image = dice1;return image = dice2;のように...

は、なぜあなたは単に `diceXを返しませんか。 '? ImageIcon変数をローカルに持つ必要はありません。それはまだJavaのC semantic of operatorを持っているのでJavaで動くかもしれませんが、そうしたくなければ予期しない結果が吐き出される可能性があります。

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

このコードは、uniformly random numbersを生成できません。 あなたのコードでゲームをプレイしている人は、結果がすぐにランダムではないことを知ります。

私はこのコードをLindentで実行して、読みやすくするために、 を途中のコードから取り出しました。だけのものの一般的な流れ に注意を払う:あなたはdice1からimage初期化されてきた

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; 

注意。これはおそらく という悪い考えです。バグを見つけ出すのがはるかに難しくなります。代わりに をnullに初期化してください。残りのコードで の値が正しく設定されていないと、他のコードが致命的なコードになります。 死亡(NullPointerException

しかし、その全体を投げ捨ててください。あなたがしたいことは配列〜 を使って、ダイ画像と値の関係を保存することです。 コードの1/6で、バギーが少なく、十、十二、または 二十面体のダイに拡張しやすくなります。

関連する問題