Mehrere Buttons zur Laufzeit dynamisch Generieren

Lautsprecher

Erfahrenes Mitglied
Hallo,

mein Programm verfügt über 30 Buttons, die dynamisch zur Laufzeit mit verschiedenen Texten, die aus einer Datenbank stammen belegt werden müssen.
Aus VB kenne ich die Variante, die Buttons über einen Index und der for-Schleife zu befüllen.
Gibt es eine ähnliche Möglichkeit in Java?

Grüße
 
Moin!
Verstehe das Problem nicht so ganz..(Liegt vielleicht daran, das ich mich mit VB nicht so auskenne) klar hat Java auch eine for-Schleife in der du die Buttons erstellen und "füllen" kannst.. aber.. naja.. Wo ist das Problem?

*grüssle*
MeinerEiner
 
Hallo,

da du ja dein Problem nicht sehr ausführlich beschrieben hast, gehe ich einfach mal davon aus, dass du nachher keine Referenz mehr auf deine Buttons hast.
Deshalb mache ich einfach mal den Vorschlag, dass du die Buttons immer wenn sie generiert werden in eine ArrayList packst. Dort kannst du dann nachher mittels einer for-Schleife über die Liste laufen und den Text der Buttons setzen.

MFG

zEriX
 
mein Problem ist, dass ich nicht weiß wie man die Sache in Code umsetzt.

Ich möchte 30 Buttons erstellen, ( 5 pro Spalte und 6 pro Zeile)
die Buttons sollen dann in einer Reihenfolge 1. Spalte, 2. Spalte, etc. mit dem Text aus der Datenbank befüllt werden.

Wie bereits beschrieben, weiß ich schon mal nicht wie ich die Buttons generieren kann.
Für die anderen Elemente in meiner Applikation, verwende ich momentan den Visual Editor bzw. (Elemente auf JPanel). Dabei habe ich nur einzelne Objekte verwendet, jedoch nicht 30 Stück von einer Sorte (hier: Buttons)

Außerdem weiß ich nicht recht wie ich die Indizierten Buttons dann mit der actionPerformed-Methode ansteuern kann....

Grüße





so was in der Art habe ich bis jetzt probiert:

Code:
private JPanel getJContentPane() {
		if (jContentPane == null) {


	jContentPane.add(getJButtons(), null);
			
		}
		return jContentPane;
	}


private JButton getJButtons() {
		if (jButton_io == null) {
			 JButton jButtons[] = new JButton[30];
			int i;
			for (i=1; i<2; i++)
			
			jButtons[i].setBounds(new java.awt.Rectangle(21,219,221,45));
			jButtons[i].setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 24					));
			jButtons[i].setBackground(new java.awt.Color(169,231,166));
			jButtons[i].setText("i.O.");
			
		
		}
		return jButtons[];   //hier scheitert es momentan
	}
 
Zuletzt bearbeitet:
Erstmal solltest du Klammern bei deiner for-Schleife setzen. Dann ist dein Rückgabewert der Methode nur ein JButton und kein Array von JButtons.

Hier ist mal ein kleines Beispiel wie man es noch lösen könnte.

Java:
package de.tutorials.swing;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GenericButtonExample extends JFrame implements ActionListener{
	
	public GenericButtonExample() {
		
		setSize(600,600);
		setLocationRelativeTo(null);
		setLayout(new GridLayout(5,6));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		for(int i = 0; i < 30; i++){
			JButton button = new JButton("button"+i);
			button.setActionCommand("button"+i);
			button.addActionListener(this);
			add(button);
			
		}
	}
	
	
	public static void main(String[] args) {
		new GenericButtonExample().setVisible(true);
	}


	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("button1")){
			System.out.println("TEST");
		}
		
	}

}


Du könntest da die Buttons auch noch in einer ArrayList speichern damit du später noch auf diese zugreifen kannst oder halt ein Array machen so wie du es gemacht hast. Der Vorteil einer ArrayList ist allerdings, dass du später immern noch Buttons hinzufügen kannst, wobei das Array auf die Größe begrenzt ist.

MFG

zEriX
 
Hallo Zerix,

danke dir das klappt ja wunderbar, habe deinen Code in ein JEditorpane eingebaut und ein wenig angepasst.
Kann es sein, dass
setLayout(new GridLayout(5,6)); nicht weiter wichtig ist? Irgendwie verändert sich bei mir die Zeilen und Spaltenanzahl je nach dem, wieviele Einträge ich aus der Datenbank auslese!


Hasta luego
 
Kann es sein, dass
setLayout(new GridLayout(5,6)); nicht weiter wichtig ist? Irgendwie verändert sich bei mir die Zeilen und Spaltenanzahl je nach dem, wieviele Einträge ich aus der Datenbank auslese!
Der Eintrag ist schon wichtig, denn er bedeutet, dass die Buttons in 5 Zeilen zu 6 Spalten angeordnet werden, wobei zeilenweise aufgefüllt wird.
Wenn du mehr oder weniger Buttons als 5*6 einliest, kann das im nachhinein ein wenig unhübsch werden. Du solltest also schon soviele Zeilen und Spalten anlegen, das sie deinen Bedürfnissen entsprechen.

*grüssle*
MeinerEiner
 
Kann es sein, dass
setLayout(new GridLayout(5,6)); nicht weiter wichtig ist?

Beim GridLayout gibt man so an, in wieviele Spalten und Zeilen die Oberfläche eingeteilt werden soll. Wenn du natürlich mehr als 30 Buttons hast, passt es ja nicht mehr, weil es so ja insgesamt 30 "Felder" wären. Wenn meh nötig wären, teilt das GridLayout den Platz neu ein.

MFG

zEriX
 
Zurück