Button simpler random auf einem JPanel verteilen?

PinkMuffin

Bekanntes Mitglied
Hallo,
ich habe einen kleinen Code geschrieben, mit dem ich meine Button random auf einem JPanel
(bzw. zwei, weil ich das mit dem GridLayout noch nicht so ganz hinbekomme und meine Button dann viel zu groß werden) verteilen kann. Leider ist "kleiner Code" ziemlich
schöngeredet, deswegen wollte ich fragen, ob hier jemand eine sinnvollere Methode kennt (Tante Google hatte leider keine Ahnung).

Code:
        buttonPanel1 = new JPanel();
        buttonPanel2 = new JPanel();
        b1 = new JButton();
        b2 = new JButton();
        b3 = new JButton();
        rAntwort = new JButton();
    }
    
    public void zurodnen()
    {
        int anordnung =(int) (Math.random()*(4-1)+1);
        if(anordnung == 1)
        {
            buttonPanel1.add(b1);
            buttonPanel1.add(b2);
            buttonPanel2.add(b3);
            buttonPanel2.add(rAntwort);
        }

        else if(anordnung == 2)
        {
            buttonPanel1.add(b1);
            buttonPanel1.add(b2);
            buttonPanel2.add(rAntwort);
            buttonPanel2.add(b3);
        }
        else if(anordnung == 3)
        {
            buttonPanel1.add(rAntwort);
            buttonPanel1.add(b2);
            buttonPanel2.add(b3);
            buttonPanel2.add(b1);
        }

        else
        {
            buttonPanel1.add(b1);
            buttonPanel1.add(rAntwort);
            buttonPanel2.add(b3);
            buttonPanel2.add(b2);
        }
        this.add(buttonPanel1);
        this.add(buttonPanel2);
 
Wenn die Zuordnung einfach zufällig sein soll, und die Fälle nicht ganz exakt so aussehen sollen, wie du es vorgegeben hast (zumal da ja permutationstechnisch noch einige fehlen), dann:
Java:
public void zurodnen() {
    List<JButton> list = List.of(b1, b2, b3, rAntwort);
    Collections.shuffle(list);
    buttonPanel1.add(list.get(0));
    buttonPanel1.add(list.get(1));
    buttonPanel2.add(list.get(2));
    buttonPanel2.add(list.get(3));
}
 
Kleine Frage: Du hast diese 4 Reihenfolgen oder darf es generell eine beliebige Reihenfolge sein?

Generell würde ich einfach eine List<JButton> zur Speicherung nutzen. Dann wäre für eine zufällige Reihenfolge ein Collections.shuffle Aufruf ausreichend.

Sollte es aber genau die 4 Reihenfolgen geben, dann könnte man sich überlegen, das über eine Methode zu machen, die mehrere Indices entgegen nimmt:
Code:
public void addButtons(int... indeces) {
  for (int index: indeces) {
    buttonPanel1.add(list.get(index));
  }
}

Dann wäre das nur noch ein switch mit case 1: addButtons(0,1,2,3); break; und so ...
 
Wenn die Zuordnung einfach zufällig sein soll, und die Fälle nicht ganz exakt so aussehen sollen, wie du es vorgegeben hast (zumal da ja permutationstechnisch noch einige fehlen), dann:
Vielen Danke, das mit den Permutationen war mir zwar klar, allerdings musste ich nur ein paar verschiedene Möglichkeiten abdecken, und weil meine Methode derart unnötig aufwendig ist, habe ich mich eben nicht mit den anderen Fällen beschäftigt (sonst wären da ja 16 ifs oder so ^^)
Die Methode kannte ich nicht, genau so etwas hatte ich gesucht 😀
 

Neue Themen


Zurück
Oben