2016-08-12 5 views
-1

Arrayの新しいStringJFrameのボタンを押すたびにコンソールに表示します。 しかし、私がJFrameのボタンを押すと、私には1の文字列しか表示されません。JButtonはArrayListからランダムな文字列を生成しません

は、ここに私のコードです:

private JFrame frame; 
private JPanel panel; 
private JButton rand; 
private String random; 

public Start() { 

    frame = new JFrame("Java Jar exec"); 
    frame.setVisible(true); 
    frame.setSize(450, 305); 
    frame.setLocation(610, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 

    panel = new JPanel(); 
    panel.setLayout(null); 

    rand = new JButton("Rand"); 
    rand.setBounds(10, 10, 10, 10); 
    rand.addActionListener(this); 
    rand.setActionCommand("rand"); 
    rand.addMouseListener(this); 

    panel.add(rand); 
    frame.add(panel); 

    ArrayList<String>arr = new ArrayList <String>(); 
    arr.add("1"); 
    arr.add("2"); 
    arr.add("3"); 
    arr.add("4"); 

    random = arr.get(new Random().nextInt(arr.size())); 

} 

@Override 
public void actionPerformed(ActionEvent e) { 

    String name = e.getActionCommand(); 

    if (name.equals("rand")) { 
     System.out.print(random + '\n'); 
    } 
} 

より多くのコードがありますが、これは重要なだけです。

+1

ボタンを押したときに呼び出されるメソッド全体を投稿できますか?あなたのコードに基づいて、コンポーネントを初期化するときに単一の値を生成し、ボタンを押すたびに同じ値が出力されると思います。 – Slimu

+2

'System.out.print(random + '\ n');' – Jerry06

+0

はどのように再ランダムを使いますか?助けてくれてありがとう! –

答えて

1

は、私はあなたの方法このようにactionPerformed変更すべきだと思う:

@Override 
public void actionPerformed(ActionEvent e) { 

    String name = e.getActionCommand(); 

    if (name.equals("rand")) { 
     random = arr.get(new Random().nextInt(arr.size())); //generating random number should be here 
     System.out.print(random + '\n'); 
    } 
} 

事があること、あなたはスタート()法、ランダム変数意志内の乱数を発生させる行を置く場合一度だけ初期化されますが、actionPerformedメソッドになると、ボタンを押すたびに割り当てが行われます。

関連する問題