# Buttons übergeben



## DBR89 (26. Jul 2011)

Hi Leute,

ich möchte mit einer Funktion Buttons generieren, um aber nich alles selber zu schreiben, bzw zu copy pasten habe ich ne Funktion erstellt, die heißt createButton. Dieser will ich einen Button übergeben. Das Funktioniert allerdings nicht, daher meine Frage, woran liegt es?

```
public void createButton(JButton button,int nummer, String name, final String lied, int x, int y){
		 
		if (button == null) {
			button = new JButton(nummer + "     " + name);
			button.setBounds(new Rectangle(x, y, 160, 63));
			button.setFont(new Font("Dialog", Font.BOLD, 14));
			button.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
					
					File file = new File(lied);
						AudioClip sound;
						try {
							sound = Applet.newAudioClip(file.toURL());
							sound.play();
						} catch (MalformedURLException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
				}
			});
		}
		
	}
```

Der Aufruf erfolgt so:

```
private JButton getJButton1() {
		createButton(jButton1, 1, "TEST", "Maid with the Flaxen Hair.wav", 25, 24);
		return jButton1;
	}
```

Fehler werden keine Angezeigt, nur beim Compilieren habe ich festgestellt, dass er nicht den jButton1 nimmt, sondern button verwendet, und das führt logischerweise zu einer Nullpointer Exception. 

Ich hoffe ihr könnt helfen.

Gruß Dennis


----------



## Tomate_Salat (26. Jul 2011)

ein schönes Beispiel, wieso man Parameter als [c]final[/c] definieren sollte. Du überschreibst die Referenz auf Button und arbeitest ab der Zeile: [c]new JButton...[/c] nicht mehr mit der Referenz von jButton1. Entweder du machst die Methodenaufrufe in createButton ohne eine neue Instanz von JButton (dabei darf aber die Referenz auf den Button nicht null sein) zu erstellen, oder du erstellst einen JButton, gibst den aber zurück. Damit schenkst du dir den Parameter button und musst  halt den Rückgabetyp von void auf JButton ändern.


----------



## nillehammer (26. Jul 2011)

```
public JButton createButtonIfNull(JButton button,int nummer, String name, final String lied, int x, int y){
  if(button!=null) {
    return button;
  }

            final JButton newJButton = new JButton(nummer + "     " + name);
            button.setBounds(new Rectangle(x, y, 160, 63));
            button.setFont(new Font("Dialog", Font.BOLD, 14));
            button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                    
                    File file = new File(lied);
                        AudioClip sound;
                        try {
                            sound = Applet.newAudioClip(file.toURL());
                            sound.play();
                        } catch (MalformedURLException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                }
            });

  return newJButton;

  
}
```


----------

