ActionListener für Buttons in Array


Sanne57

Grünschnabel
#1
Hallo,

ich habe ein Array mit Buttons, und schaffe es nicht, deren ActionListener wie folgt zu gestalten:
er soll zunächst einfach nur den Text auf dem geklickten Button ändern in den aktuellen Wert des RadioButtons .

Ich kann zwar den Wert auslesen, nicht aber neu setzen, da ich ich innerhalb des ActionsListeners "y" nicht verwenden darf.
es funktioniert:
Auslesen: System.out.println(e.getActionCommand());
Setzen expliziter Button: Fields_row1[0].setText("NEU");

aber NICHT: Fields_row1[y].setText("NEU");

Wie kann ich das bewerkstelligen ?
Würfe mich riesig über Eure Hilfe freuen.

Und aus diesem Problem resultierend: ich wüsste zum späteren Aufruf weiterer Funktionen gern, wie das Array heisst, in dem ich mich befinde (später wird es mehrere geben), und den aktuellen Wert von "y". Hängt alles zusammen...bin quasi "orientierungslos" im Listener...

LG, Sanne


hier der Code:
============
Code:
package outback;


import java.awt.EventQueue;


import javax.swing.JFrame;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.JSpinner;

import javax.swing.SpinnerListModel;

import javax.swing.JComboBox;

import javax.swing.JTextField;

import javax.swing.JPanel;

import javax.swing.JRadioButton;


public class outback_Frame {


    private JFrame frame;


  

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    outback_Frame window = new outback_Frame();

                    window.frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

    }


  

    /**

     * Create the application.

     */

    public outback_Frame() {

        initialize();

    }



    /**

     * Initialize the contents of the frame.

     */

  

    private void initialize() {

        frame = new JFrame();

        frame.setBounds(100, 100, 800, 500);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(null);

      

              

        JButton [] Fields_row1 = new JButton[4];

        for(int y=0; y<4; y++){


            Fields_row1[y] = new JButton("?");

            Fields_row1[y].setBounds(20+85*y, 200, 50, 55);

  

          

            Fields_row1[y].addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {


                //  Text auf Button ändern in Wert von RadioButton

                    Fields_row1[0].setText("NEU");    // einen bestimmten Button ansprechend klappt

                    System.out.println(e.getActionCommand()); // auslesen klappt auch

              

                //    Danach benötige zum Aufruf div. Funktionen die Informationen:

                //        - in welchem Array bin ich (es wird später mehrere geben), hier also "Fields_row1"

                //        - den Wert von y

                  

                }

            });

          

            frame.getContentPane().add(Fields_row1[y]);

        }

      

      

        JRadioButton rdbtnNewRadioButton = new JRadioButton("Koala");

        rdbtnNewRadioButton.setSelected(true);

        rdbtnNewRadioButton.setBounds(100, 270, 100, 23);

        frame.getContentPane().add(rdbtnNewRadioButton);

      

        JRadioButton rdbtnNewRadioButton_4 = new JRadioButton("Waran");

        rdbtnNewRadioButton_4.setBounds(220, 270, 100, 23);

        frame.getContentPane().add(rdbtnNewRadioButton_4);

      

    }

}
 
Zuletzt bearbeitet von einem Moderator:

zerix

Hausmeister
Moderator
#2
Hi,

in dem Fall sind die API Docs dein Freund. Java Platform SE 8
Die Methode actionPerformed bekommt ja ein Object übergeben vom Typ ActionEvent.
Dieses Event-Object beinhaltet alle Informationen zum Event, was passiert ist. So kannst du beispielsweise die Quelle abfragen mit getSource.
Weiter helfe ich dir jetzt nicht, du sollst ja lernen dir die Doku genauer anzuschauen. Stichwort hier ist cast.


Viele Grüße
Sascha