Buttons dynamisch erstellen (NetBeans)

keksdose132

Mitglied
Guten Morgen/Mittag/Abend!
Ich versuche aktuell Buttons dynamisch mittels Knopfdruck einem Panel hinzuzufügen.
Obwohl die dafür zuständige Methode ausgeführt wird und keine Fehler auswirft, wird der Button im Panel nicht angezeigt.

Hier mein aktueller Code:
Code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
    JButton button = new JButton("Button");
    panel.add(button);
    panel.revalidate();
    panel.repaint();
    System.out.println("Button created!"); 
}

Hat irgend jemand vielleicht eine Ahnung woran das liegen könnte?
PS: Wenn noch irgendwelche zusätzlichen Informationen benötigt werden, bitte bescheid sagen.

Danke!
keksdose132.
 
Hab den Code nun umgeschrieben zu:
Code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
    JButton button = new JButton("Button");
    panel.add(button);
    panel.revalidate();
    panel.repaint();
   
    panel.setVisible(false);
    panel.setVisible(true);
       
    panel.setEnabled(false);
    panel.setEnabled(true);

    pack();
    System.out.println("Button created!");
}

Funktioniert aber leider immer noch nicht.
Also der Button wird nicht angezeigt.

keksdose132.
 
Ja, das dürfte GroupLayout sein, das für GUI-Editoren gedacht ist und nicht dazu, dynamisch erweitert zu werden. Du kannst ein Panel einfügen und das Layout des Panels z. B. auf Box-, Grid- oder FlowLayout setzen, anschließend verwendest Du dieses Panel, um neue Elemente hinzuzufügen.
 
Du kannst ein Panel einfügen und das Layout des Panels z. B. auf Box-, Grid- oder FlowLayout setzen, anschließend verwendest Du dieses Panel, um neue Elemente hinzuzufügen.

Danke! Es funktioniert.
Nur eine Frage hätte ich noch dazu. Ich habe das Panel nun in ein JScrollPane eingebettet damit ich auch scrollen kann, nur ist die Frage wie ich deaktivieren kann, das die Buttons das Panel nach rechts endlos erweitern und somit nur das scrollen von links nach rechts ermöglichen. Ich möchte das die Buttons untereinander sind, also das ich hoch- und runterscrollen kann.

Um das ganze zu veranschaulichen hab ich folgende Bilder angehangen:

1562607899156.png

1562607937902.png

keksdose132.
 
Indem Du ein anderes Layout verwendest 🙂 Zum Beispiel ein Box-Layout (dort kannst Du die Richtung vorgeben) oder ein GridLayout (1-spaltig; dort sind dann alle Buttons gleich groß).

Evtl. willst Du aber auch eine Liste oder eine Tabelle verwenden; das hängt halt davon ab, was Du eigentlich vorhast.
 
[...] oder ein GridLayout (1-spaltig; dort sind dann alle Buttons gleich groß).

Wenn ich das GridLayout verwende und bei Columns 2 und bei Rows 0 eintrage, dann werden die Buttons zu Beginn sehr groß (sie nehmen den kompletten Raum des Panels ein) und werden anschließend immer kleiner, bis sie ihre minimale Größe erreicht haben.

Also wie folgt:

12181
12182

Kann man das irgendwie verhindern? Also das die Buttons z.B. sofort die Größe wie in Bild 2 haben?

keksdose132.
 

Zurück
Oben