Kryptaesthesie
Erfahrenes Mitglied
Hallo.
Ich habe eine Schulaufgabe zu lösen, stehe aber gerade ein wenig auf dem Schlauch.
Problem bei der Geschichte ist die variable Anzahl der JButton.
Beim Klick auf einen solchen Button soll die Hintergrundfarbe von grün auf rot wechseln und die entsprechenden Zahlenwerte sollen angepasst werden.
Ich habe drei Klassen: Anwendungsfenster (Hauptprogramm), NeueWerte, SitzKlick.
SitzKlick stellt den ActionListener für die ganzen Button dar. Und genau da kommen wir zu meinem Problem. Die Button, anfangs alle grün, stellen freie Sitzplätze dar. Wird ein Button / ein Sitz gedrückt, ist dieser belegt und soll nun rot dargestellt werden.
Wie stelle ich das in SitzKlick an die Farbe zu ändern, da ich ja nicht weiß welcher Button das Ereignis ausgelöst hat. Geht das über die AddActionCommand-Methode? Aber da komme ich nicht weiter, da die Anzahl der Button / Sitze variieren kann.
Habt ihr eine Idee für mich? Wie kann ich die Farbe des Buttons ändern? Den Rest mit den Zahlen, etc. bekomme ich dann sicher raus.
Danke euch schon mal!
Hier noch die drei Klassen (auch für jeden anderen Tipp, bezüglich meines Codes, bin ich dankbar):
Anwendungsfenster:
NeueWerte:
SitzKlick
Ich habe eine Schulaufgabe zu lösen, stehe aber gerade ein wenig auf dem Schlauch.
Problem bei der Geschichte ist die variable Anzahl der JButton.
Beim Klick auf einen solchen Button soll die Hintergrundfarbe von grün auf rot wechseln und die entsprechenden Zahlenwerte sollen angepasst werden.
Ich habe drei Klassen: Anwendungsfenster (Hauptprogramm), NeueWerte, SitzKlick.
SitzKlick stellt den ActionListener für die ganzen Button dar. Und genau da kommen wir zu meinem Problem. Die Button, anfangs alle grün, stellen freie Sitzplätze dar. Wird ein Button / ein Sitz gedrückt, ist dieser belegt und soll nun rot dargestellt werden.
Wie stelle ich das in SitzKlick an die Farbe zu ändern, da ich ja nicht weiß welcher Button das Ereignis ausgelöst hat. Geht das über die AddActionCommand-Methode? Aber da komme ich nicht weiter, da die Anzahl der Button / Sitze variieren kann.
Habt ihr eine Idee für mich? Wie kann ich die Farbe des Buttons ändern? Den Rest mit den Zahlen, etc. bekomme ich dann sicher raus.
Danke euch schon mal!
Hier noch die drei Klassen (auch für jeden anderen Tipp, bezüglich meines Codes, bin ich dankbar):
Anwendungsfenster:
Code:
package version1;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Anwendungsfenster extends JFrame {
private final int REIHEN_BEI_PROGRAMMSTART = 5;
private final int SITZE_PRO_REIHE_BEI_PROGRAMMSTART = 4;
private final int REIHENBREITE = 80;
private Container cont;
// Konstruktor
public Anwendungsfenster() {
System.out.println("Konstruktoraufruf!");
interfaceAufbauen(REIHEN_BEI_PROGRAMMSTART, SITZE_PRO_REIHE_BEI_PROGRAMMSTART);
}
public void interfaceAufbauen(int anzReihen, int sitzeProReihe) {
cont = this.getContentPane();
cont.setLayout(null);
cont.removeAll();
// Felder, die dem Benutzer Eingaben ermoeglichen
JTextField jtAnzReihen, jtSitzeProReihe;
// statische Labelfelder
JLabel jlAnzReihen, jlSitzeProReihe, jlFreieSitze, jlBesaetzteStuehle;
// Button um die Benutzereingaben zu uebernehmen
JButton jbAenderungenUebernehmen;
// Voreinstellungen zum Anwendungsfenster
this.setTitle("Reservierungssystem");
this.setSize(800, 600);
this.setLocation(10, 40);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Felder fuer die Benutzereingaben
jlAnzReihen = new JLabel();
jlAnzReihen.setText("Anzahl der Reihen:");
jlAnzReihen.setBounds(10, 10, 130, 15);
cont.add(jlAnzReihen);
jlSitzeProReihe = new JLabel();
jlSitzeProReihe.setText("Sitze pro Reihe:");
jlSitzeProReihe.setBounds(10, 30, 130, 15);
cont.add(jlSitzeProReihe);
jtAnzReihen = new JTextField();
jtAnzReihen.setText("" + anzReihen);
jtAnzReihen.setBounds(10 + 130 + 10, 8, 30, 20);
cont.add(jtAnzReihen);
jtSitzeProReihe = new JTextField();
jtSitzeProReihe.setText("" + sitzeProReihe);
jtSitzeProReihe.setBounds(10 + 130 + 10, 30, 30, 20);
cont.add(jtSitzeProReihe);
// Info ueber die Anzahl der freien und besetzten Stuehle
jlFreieSitze = new JLabel();
jlFreieSitze.setText("freie Sitzplaetze: " + (anzReihen * sitzeProReihe));
jlFreieSitze.setBounds(10 + 130 + 10 + 30 + 30, 10, 150, 15);
cont.add(jlFreieSitze);
jlBesaetzteStuehle = new JLabel();
jlBesaetzteStuehle.setText("belegte Sitzeplaetze: 0");
jlBesaetzteStuehle.setBounds(10 + 130 + 10 + 30 + 30, 30, 150, 15);
cont.add(jlBesaetzteStuehle);
// Aenderungen-Uebernehmen-Button
NeueWerte nw = new NeueWerte(this, jtAnzReihen, jtSitzeProReihe);
jbAenderungenUebernehmen = new JButton();
jbAenderungenUebernehmen.setText("ANWENDEN");
jbAenderungenUebernehmen.setBounds(10 + 130 + 10 + 30 + 30 + 150 + 40, 2, 120, 50);
jbAenderungenUebernehmen.addActionListener(nw);
cont.add(jbAenderungenUebernehmen);
// Objekte bei denen die Anzahl variieren kann
JButton[] jbSitze = new JButton[Integer.valueOf(jtSitzeProReihe.getText()).intValue()];
JLabel[] jlAnzFreiProReihe = new JLabel[Integer.valueOf(jtAnzReihen.getText()).intValue()];
JLabel[] jlReihe = new JLabel[Integer.valueOf(jtAnzReihen.getText()).intValue()];
reihenEinrichten(sitzeProReihe, jlReihe, jlAnzFreiProReihe, jbSitze);
// Fenster jetzt anzeigen
this.setVisible(true);
}
private void reihenEinrichten(int sitzeProReihe, JLabel jlUeberschriftReihe[], JLabel jlAnzFreiProReihe[], JButton jbSitz[]) {
SitzKlick sk = new SitzKlick();
for( int i = 0; i < jlUeberschriftReihe.length; i++ ) {
// Wert der x-Koordinate der jeweiligen Reihe
int ausrichtungLinks = 10 + (i * (REIHENBREITE + 10));
// Reihennr, anzeigen
jlUeberschriftReihe[i] = new JLabel();
jlUeberschriftReihe[i].setText("Reihe " + (i+1));
jlUeberschriftReihe[i].setBounds(ausrichtungLinks + 10, 80, REIHENBREITE, 13);
cont.add(jlUeberschriftReihe[i]);
// Anzahl der freien Plätze am unteren Rand des Anwendungsfensters anzeigen
jlAnzFreiProReihe[i] = new JLabel();
jlAnzFreiProReihe[i].setText("" + sitzeProReihe + " frei");
jlAnzFreiProReihe[i].setBounds(ausrichtungLinks, this.getHeight() - 50, REIHENBREITE, 13);
cont.add(jlAnzFreiProReihe[i]);
// Buttons, die die Sitze darstellen, platzieren
for( int j = 0; j < jbSitz.length; j++ ) {
jbSitz[j] = new JButton();
jbSitz[j].setText("R:" + (i+1) + " S:" + (j+1));
int buttonhoehe = 30;
jbSitz[j].setBounds(ausrichtungLinks, 100 + (j * (10 + buttonhoehe)), REIHENBREITE, buttonhoehe);
jbSitz[j].setBackground(Color.GREEN);
jbSitz[j].addActionListener(sk);
// ActionCommand?
cont.add(jbSitz[j]);
}
}
}
public static void main(String[] args) {
new Anwendungsfenster();
}
}
NeueWerte:
Code:
package version1;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
public class NeueWerte implements ActionListener {
Anwendungsfenster anw;
JTextField jtAnzahlDerReihen;
JTextField jtSitzeProReihe;
public NeueWerte(Anwendungsfenster anw, JTextField anzDerReihen, JTextField sitzeProReihe) {
this.anw = anw;
this.jtAnzahlDerReihen = anzDerReihen;
this.jtSitzeProReihe = sitzeProReihe;
}
public void actionPerformed(ActionEvent arg0) {
System.out.println("Uebernehmen!");
anw.interfaceAufbauen(Integer.valueOf(jtAnzahlDerReihen.getText()).intValue(), Integer.valueOf(jtSitzeProReihe.getText()).intValue());
}
}
SitzKlick
Code:
package version1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SitzKlick implements ActionListener {
public void actionPerformed(ActionEvent a) {
System.out.println("ID: " + a.getID()); // bringt micht nicht weiter
}
}