Во-первых, создание списка неэффективно. Вы создаете массив от 0 до 48, а затем используете поток для увеличения каждого значения на 1 и собираете результат в List
, чтобы перемешать его ...
Вы можете либо
for(int i = 1; i < 50; ++i){
aList.add(i);
}
Collections.shuffle(aList);
Или используйте Stream
, если вы действительно хотите
List<Integer> list = IntStream.range(1, 50).boxed().collect(Collectors.toList());
Collections.shuffle(list);
Затем вам нужно сделать этот список доступным из действия, вы можете либо
- установить список статической или переменной-члена
- вернуть список из метода
Я предпочитаю вторую версию
public static List<Integer> Random(){
List<Integer> list = IntStream.range(1, 50).boxed().collect(Collectors.toList());
Collections.shuffle(list);
return list;
}
Отлично, у вас есть список, доступный в методе. Теперь вам просто нужно перебрать каждое значение для каждой кнопки и преобразовать Integer
в String
. Мне нравится конкатенация за это.
@Override
public void actionPerformed(ActionEvent event)
{
//Shuffle the values on each buttons
if(event.getSource() == shuffleButton){
List<Integer> list = random();
for(JButton btn : jbArray){
btn.setText("" + list.remove(0)); //Removing the item is a security to be sure the value will not be used later by mistake.
}
}
}
Одним нажатием на кнопку «Перемешать» все кнопки, присутствующие в jbArray
, получат свои значения. Это может быть адаптировано для создания длины динамического значения, скажем, динамического числа кнопок.
List<Integer> list = random(jbArray.length);
for(JButton btn : jbArray){
btn.setText("" + list.remove(0)); //Removing the item is a security to be sure the value will not be used later by mistake.
}
, где random
стало:
public static List<Integer> random(int range){
List<Integer> list = IntStream.range(1, range).boxed().collect(Collectors.toList());
Collections.shuffle(list);
reutrn list;
}