Button als Feld nutzen

Diskutiere Button als Feld nutzen im Java Basics - Anfänger-Themen Bereich.
J

Jiscona

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.
 
krgewb

krgewb

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:
krgewb

krgewb

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");
 
J

Jiscona

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:
krgewb

krgewb

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.
 
J

Jiscona

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
 
mihe7

mihe7

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());
    }
}
 
J

Jiscona

Java:
    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        System.out.println("Pressed " + button.getText());
    }
Ist es hierbei auch möglich, festzustellen, der wievielte Button es war der angeklickt wurde (also welchen Wert bei ihm hat)?
 
krgewb

krgewb

Ist es hierbei auch möglich, festzustellen, der wievielte Button es war der angeklickt wurde (also welchen Wert bei ihm hat)?
Du kannst mit Hilfe einer for-Schleife durch das Array iterieren. Dort vergleichst du das JButton-Objekte mit Hilfe von == mit dem JButton-Objekt an Stelle i.
 
krgewb

krgewb

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);
}
 
Thema: 

Button als Feld nutzen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben