Ja.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?
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);
}
buttons.get(1).setText("Test");
Ja, im ActionListener, den Du registriert hast.Noch eine Frage: Ist es möglich, zu überprüfen, ob irgendeiner der Buttons geklickt wurde?
b_beispiel[i].addActionListener(this);
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Hallo")) {
// ...
} else if (e.getActionCommand().equals("Test")) {
// ...
}
}
So?:Ganz oben (in der Zeile mit "public class" muss "implements ActionListener" stehen.
public class GUI2 extends Frame implements ActionListener {
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());
}
}
Oh, ich dachte, dass die nicht so wichtig ist und man die auch nacher einfügen kann.@Jiscona Weil du die Methode, die ich in Beitrag #7 geschrieben habe, vergessen hast,.
Ist es hierbei auch möglich, festzustellen, der wievielte Button es war der angeklickt wurde (also welchen Wert bei ihm hat)?Java:@Override public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); System.out.println("Pressed " + button.getText()); }
Wenn du ein Interface implementierst, musst du alle Methoden von dem Interface überschreiben.Oh, ich dachte, dass die nicht so wichtig ist und man die auch nacher einfügen kann.
Jetzt funktioniert's, Danke.
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.Ist es hierbei auch möglich, festzustellen, der wievielte Button es war der angeklickt wurde (also welchen Wert bei ihm hat)?
@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;
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("i ist: " + e.getActionCommand());
}
for (int i = 0; i < 10; i++) {
b_beispiel[i] = new JButton("Test");
b_beispiel[i].setActionCommand("" + i);
}