# JButton zur laufzeit erzeugen/ löschen



## maesih (7. Jun 2006)

Hallo zusammen,

Zwar bekomme ich von einer anderen Methode einen int wert (anzahl) der bestimmt wieviele Jbuttons erzeugt werden sollen. Wie mache ich das am besten ? Soll ich das in der folgenden klasse machen oder besser die buttons per objekt in die klasse einbinden? Und wie füge ich die button dem actionPerformed zu, so dass ich spöter per klick auf den button die farbe ändern kann! Kann ich zu einem späteren zeitpunkt den einen erzeugten button wieder löschen?


Wäre antwort würde sehr, sehr weiterhelfen!



//HAuptklasse .......

blabla blabla......
*
public void setButton(){*


*  for ( int i=0; i< anzahl; i++){
          //---------------------------------------------
            JButton t = new JButton(""+i);
            setBackground(Color.lightGray);
            t.setSize(20, 20);
            t.setLocation(250+i*30, 20);
            t.setVisible(true);
            t.addActionListener(this); 
            t.setBackground(Color.RED);
            add(t);

          //---------------------------------------------           
            }*        }

  // ActionListener Methoden -----------------------------------------------        
         public void actionPerformed(ActionEvent e)
        {
            String cmd = e.getActionCommand();

            if (cmd.equals("Optionen")){
                repaint();
*anzahl= Anzahlbutton();
                setButton();*

              }

    }


----------



## Beni (7. Jun 2006)

Zum löschen: wenn du den Buttons kennst (eine Referenz besitzt), kannst du ihn mit "remove" von seinem Vater entfernen.

Zu deinen Buttons: ich würde pro Button einen ActionListener erzeugen. Das könnte irgendwie so aussehen:

```
public class Blabla{
  // Generics, ab Java 1.5 erhältlich
  private List<JButton> buttons = new ArrayList<JButton>();
  
  public void setButtons( int anzahl ){
     // Entfernen falls notwendig
     while( anzahl < buttons.size() ){
        int index = buttons.size()-1;
        JButton button = buttons.get( index );
        buttons.remove( index );
        remove( button );
     }

     // Hinzufügen falls notwendig
     while( anzahl > buttons.size() ){
       JButton button = new JButton();

       // eigener Listener!
       ActionListener listener = new ColorButtonListener( button );
       button.addActionListener( listener );
       buttons.add( button );
       add( button );
     }
  }

  // Klasse welche genau einen Button abhöhrt.
  private class ColorButtonListener implements ActionListener{
    private JButton button;

    public ColorButtonListener( JButton button ){
      this.button = button;
    }

    public void actionPerformed( ActionEvent e ){
       button.setColor( ...irgendeine Farbe... );
    }
  }
}
```


----------



## maesih (7. Jun 2006)

Besten dank, jedoch wie kann ich einen bestimmten button ansprechen ......... das heisst zum beisipiel wenn ich button 1 drücke mit System.out.println "button1" ausdrucke und bei button 2 "button2" usw. ?

Wäre noch sehr dankbar für dies!


----------



## Beni (7. Jun 2006)

Laufen lassen und staunen:

```
package forum;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

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

public class Blabla extends JFrame{
    // Generics, ab Java 1.5 erhältlich
    private List<JButton> buttons = new ArrayList<JButton>();
   
    public static void main( String[] args ) {
        Blabla bla = new Blabla();
        bla.setLayout( new FlowLayout() );
        bla.setButtons( 10 );
        bla.pack();
        bla.setLocationRelativeTo( null );
        bla.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        bla.setVisible( true );
    }
    
    public void setButtons( int anzahl ){
       // Entfernen falls notwendig
       while( anzahl < buttons.size() ){
          int index = buttons.size()-1;
          JButton button = buttons.get( index );
          buttons.remove( index );
          remove( button );
       }

       // Hinzufügen falls notwendig
       while( anzahl > buttons.size() ){
         JButton button = new JButton();
         button.setText( "Ich bin der " + (buttons.size()+1) + " te Button." );

         // eigener Listener!
         ActionListener listener = new ColorButtonListener( button );
         button.addActionListener( listener );
         buttons.add( button );
         add( button );
       }
    }

    // Klasse welche genau einen Button abhöhrt.
    private class ColorButtonListener implements ActionListener{
      private JButton button;

      public ColorButtonListener( JButton button ){
        this.button = button;
      }

      public void actionPerformed( ActionEvent e ){
         System.out.println( button.getText() );
      }
    }
  }
```


----------

