На этом веб-сайте есть код для получения списка всех перестановок массива (см. Метод perm2), он закодирован для массивов символов, но может быть изменен для работы с массивами int, а также с другими языками, затем Вы можете использовать идею MJV.
http://www.cs.princeton.edu/introcs/23recursion/Permutations.java.html
Если в Java это то, что я бы попробовал ....
Как только вы получите все возможные перестановки, возможно, в векторе, я думаю, вы можете использовать макет мешка сетки и изменить ограничения сетки, выбирая один из элементов вектора случайным образом. Я не пробовал это, но я думаю в духе
Vector permutations = ... // получить перестановку, используя класс, аналогичный классу на сайте для массива целых чисел {0,1,2,3}
//The panel
JPanel pane;
JButton button;
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
//Choose one permutation at random
int foo = arcrandom() % 23;
int current[] = permutations.get(foo);
//Add the buttons in the chosen order
button = new JButton("Button 1");
c.gridx = current[0];
c.gridy = 0;
pane.add(button, c);
button = new JButton("Button 2");
c.gridx = current[1];
c.gridy = 0;
pane.add(button, c);
button = new JButton("Button 3");
c.gridx = current[2];
c.gridy = 0;
pane.add(button, c);
button = new JButton("Button 4");
c.gridx = current[3];
c.gridy = 0;
pane.add(button, c);
Дайте мне знать, если это работает!