MarcX: Dynamisch erzeugte Buttons

Hallo,

ich erzeuge dynamisch Buttons in der Weise:

for(int i=0;i10;i+){
JButton x = new JButton(icon1);
x.setActionCommand("bt"i);
x.addActionListener(this);
panel.add(x)
......
}

nun ist es ja nicht schwer herauszufinden welcher Button gedrückt wurde, aber wie kann ich gezielt den Icon eines Buttons verändern(z.Bsp den des Buttons bt4) ?

VG Marc

  1. Hallo,

    ich erzeuge dynamisch Buttons in der Weise:

    for(int i=0;i10;i+){
    JButton x = new JButton(icon1);
    x.setActionCommand("bt"i);
    x.addActionListener(this);
    panel.add(x)
    ......
    }

    nun ist es ja nicht schwer herauszufinden welcher Button gedrückt wurde, aber wie kann ich gezielt den Icon eines Buttons verändern(z.Bsp den des Buttons bt4) ?

    public JButton x[] = new JButton[10];

    public void initButton() {
      for(int i=0; i<x.length; i++) {
        x[i] = new JButton(icon1);
        x[i].set...;
        x[i].add...;
        panel.add(x[i]);
        ...
      }
      changeIcon(x[5], icon2);
    }

    public void changeIcon(JButton jb, Icon i) {
      ...;
    }

    public void actionPerformed(ActionEvent ae) {
      for(int i=0; i<x.length; i++) {
        if(ae.getSource().equals(x[i])) {
          changeIcon(x[i], icon3);
        }
      }
    }

    So geht das!

    mfg gast

    1. Hallo Gast,

      public void actionPerformed(ActionEvent ae) {
        for(int i=0; i<x.length; i++) {
          if(ae.getSource().equals(x[i])) {
            changeIcon(x[i], icon3);
          }
        }
      }

      Ich würde da ja einfach folgendes schreiben:
      changeIcon((JButton) ae.getSource(), icon3);

      Du bekommst doch schon das Objekt, was also soll diese lineare Suche?
      Dann kann man sich auch den Array mit den Buttons sparen. Es kann natürlich für andere Zwecke sinnvoll sein, sich alle Buttons irgendwo zu merken.

      Grüße

      Daniel

      1. Vielen Dank für eure Antworten. Aber ich habe gemerkt, dass ich etwas elementares vergessen habe. Ich möchte nicht den Icon des Gleichen sondern den irgendeines anderen Buttons ändern.

        Klick auf button x soll zur folge habe das y1 y2 y3 ihre Icons ändern. Hat jemand dazu eine Idee?

        VG Marc

        1. Vielen Dank für eure Antworten. Aber ich habe gemerkt, dass ich etwas elementares vergessen habe. Ich möchte nicht den Icon des Gleichen sondern den irgendeines anderen Buttons ändern.

          Klick auf button x soll zur folge habe das y1 y2 y3 ihre Icons ändern. Hat jemand dazu eine Idee?

          Die Lösung dafür liegt eigentlich auf der Hand, lese noch mal die Postings durch. Daniel schrieb das man sich den Array sparen könnte und  gleich durch casting der getSource-Methode des ActionEvent-Objekts an das geklickt JButton-Objekt heran zu kommen. Es aber sinnvoll ist die JButton-Objekte in ein Array zu merken wenn man anderweitig darauf zugreifen möchte.

          mfg gast

          1. Hallo Gast,

            Noch so eine allgemeinere Anmerkung:
            Das mit dem Array ist ja ganz nett und auch OK, wenn die Buttons alle die gleiche "Bedeutung" haben.
            Wenn man eine komplexere Komponente baut und es da irgendwelche Trickreichen zusammenhänge zwischen Buttons oder anderen Elementen gibt, sollte man aber ein paar Variablen mehr spendieren, und die verschiedenen Dinge auseinanderhalten.
            Eine komplexere Logik auf Basis von button[1] bis button[100] dürfte ziemlich unwartbaren Code ergeben ;-)

            Grüße

            Daniel