Button simpler random auf einem JPanel verteilen?

Diskutiere Button simpler random auf einem JPanel verteilen? im AWT, Swing, JavaFX & SWT Bereich.
P

PinkMuffin

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);
 
H

httpdigest

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

JustNobody

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 ...
 
P

PinkMuffin

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 :D
 
Thema: 

Button simpler random auf einem JPanel verteilen?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben