Button als Feld nutzen

Jiscona

Mitglied
Hallo,

ist es möglisch, einen JButton als Feld zu benutzen, sodass man dann mehrere dieser Art hat und diese dann z.B. mitb_beispiel[1].setText("Test") ändern kann?

VG und Danke im Voraus.
 
Du kannst es als Array und auch als ArrayList realisieren. Hier als ArrayList:
Java:
private ArrayList<JButton> buttons = new ArrayList<>();

    for (int i = 0; i < 10; i++) {
        JButton btn = new JButton("test " + i);
        btn.addActionListener(this);
        buttons.add(btn);
        panel.add(btn);
    }
Später kannst du den Text dann so ändern:
Java:
buttons.get(1).setText("Test");
 
Zuletzt bearbeitet:
Nun so, wie du es wolltest:
Java:
private JButton b_beispiel[] = new JButton[10];

for (int i = 0; i < 10; i++) {
    b_beispiel[i] = new JButton();
}

Dann kannst du schreiben:
Java:
b_beispiel[1].setText("Test");
 
Danke!
Genauso habe ich das gebraucht.

Noch eine Frage: Ist es möglich, zu überprüfen, ob irgendeiner der Buttons geklickt wurde?

PS: Ich habe jetzt festgestellt, dass ich nur keine Smileys nutzen kann.
 
Zuletzt bearbeitet:
Ganz oben (in der Zeile mit "public class" muss "implements ActionListener" stehen.

In deiner Schleife
Java:
b_beispiel[i].addActionListener(this);


Und dann
Java:
@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Hallo")) {
        // ...
    } else if (e.getActionCommand().equals("Test")) {
        // ...
    }
}
Wenn du bei deinem Button keinen ActionCommand gespeichert hast, wird einfach der Text von dem Button genommen.
 
Dann kommt allerdings die Fehlermeldung:
Code:
GUI2.java:16:8: error: GUI2 is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener
 
Java:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Test implements ActionListener {
    JButton buttons[] = new JButton[9];

    public void createAndShowGUI() {
        JPanel panel = new JPanel(new GridLayout(3,3));
        for (int i = 0; i < buttons.length; i++) {
           buttons[i] = new JButton("Button " + (i+1));
           buttons[i].addActionListener(this);
           panel.add(buttons[i]);
        }
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        System.out.println("Pressed " + button.getText());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().createAndShowGUI());
    }
}
 
Code:
    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        for(int i = 0; i < b_beispiel.length; i++) {
            if(b_beispiel[i] == button) {
                System.out.println("i ist: " + i);
                break;
            }
        }
    }
Oder einfach mit actionCommand:
Code:
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("i ist: " + e.getActionCommand());
    }

Dann musst du aber oben schreiben:
Java:
for (int i = 0; i < 10; i++) {
    b_beispiel[i] = new JButton("Test");
    b_beispiel[i].setActionCommand("" + i);
}
 

Zurück
Oben