2016-08-12 2 views
-1

Я хочу новый String от моего Array, чтобы показывать в консоли каждый раз, когда я нажимаю кнопку в JFrame. Однако, когда я нажимаю кнопку в JFrame, она показывает мне только одну строку, которая не изменяется.JButton dosen't generat random string from 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

как использовать re-random? Спасибо за помощь! –

ответ

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'); 
    } 
} 

Дело в том, что если вы поставите линию, которая генерирует случайное число в пределах Start() метод, случайная переменная инициализироваться только один раз, но когда он будет в actionPerformed метод, назначение будет выполняться каждый раз, когда вы нажимаете кнопку.