Ahoihoi Leute,
ich versuche gerade etwas in das Java GUI mit Swing und AWT hereinzukommen, bin aber auf ein Problem mit ActionListenern und JButtons.
Kurz: Ich habe ein JButtonArray und möchte, dass ein gedrückter Button permanent die Farbe ändert wenn er gedrückt wird.
Wie finde ich heraus welcher Button das ActionEvent ausgelöst hat? Wüsste ich dies könnte ich ihn ja direk ansprechen, oder? Oder gibt es gar eine viel bessere Möglichkeit das Problem zu lösen als ActionListener?
Hintergrund: Ich möchte eine Feld aus JButtons haben, in dem ich durch anklicken der Buttons "zeichnen" kann. Das ganze möchte ich dann später als IntegerArray ausgeben, aber das ist für mein Problem ja noch nicht wichtig.
Einen spezifischen Button bei einem Klick auf irgendeinen der Jbuttons bekomme ich verfärbt, aber das ist ja nicht was ich will.
Im Internet finde ich nur Anleitungen wie man EINEN SPEZIFISCHEN JButton ändert, aber nicht wie dynamisch einer aus einem Array ausgewählt wird!
Vielen Dank im vorraus!
Die Klasse für den Frame:
Die Main Methode:
ich versuche gerade etwas in das Java GUI mit Swing und AWT hereinzukommen, bin aber auf ein Problem mit ActionListenern und JButtons.
Kurz: Ich habe ein JButtonArray und möchte, dass ein gedrückter Button permanent die Farbe ändert wenn er gedrückt wird.
Wie finde ich heraus welcher Button das ActionEvent ausgelöst hat? Wüsste ich dies könnte ich ihn ja direk ansprechen, oder? Oder gibt es gar eine viel bessere Möglichkeit das Problem zu lösen als ActionListener?
Hintergrund: Ich möchte eine Feld aus JButtons haben, in dem ich durch anklicken der Buttons "zeichnen" kann. Das ganze möchte ich dann später als IntegerArray ausgeben, aber das ist für mein Problem ja noch nicht wichtig.
Einen spezifischen Button bei einem Klick auf irgendeinen der Jbuttons bekomme ich verfärbt, aber das ist ja nicht was ich will.
Im Internet finde ich nur Anleitungen wie man EINEN SPEZIFISCHEN JButton ändert, aber nicht wie dynamisch einer aus einem Array ausgewählt wird!
Vielen Dank im vorraus!
Die Klasse für den Frame:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class RetroFrameTest extends JFrame {
Container meinContainer;
private int cols;
private int rows;
JButton[] pixel;
public RetroFrameTest(int _cols, int _rows) {
cols = _cols;
rows = _rows;
meinContainer = getContentPane();
meinContainer.setLayout(new GridLayout(rows, cols));
initialisiereAusgabe();
}
ActionListener klickListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
pixel[45].setBackground(Color.ORANGE); //Setzt den Button pixel[45] orange, ich möchte aber den Button, der gedrückt wurde in der Farbe ändern!
//Wie finde ich heraus, welcher Button dieses ActionEvent erzeugt hat, bzw welcher Listener es aufgenommen hat?
};
};
private void initialisiereAusgabe() {
pixel = new JButton[(cols * rows)];
for (int i = 0; i < (cols * rows); i++) {
pixel[i] = new JButton();
meinContainer.add(pixel[i]);
pixel[i].setBackground(Color.GRAY);
pixel[i].setOpaque(true);
pixel[i].addActionListener(klickListener);
}
}
public void ausgabeFigur(int[] figur) {
for (int i = 0; i < figur.length; i++) {
if (figur[i] == 1) {
pixel[i].setBackground(Color.ORANGE);
}
}
}
}
Die Main Methode:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class MeinFrame extends JFrame {
public static void main(String[] args) {
RetroFrameTest screen = new RetroFrameTest(20, 15, figur);
screen.setTitle("RetroScreen");
screen.setSize(400, 300);
screen.setLocation(200, 200);
screen.setVisible(true);
screen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}