Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte beim Klick auf einen Button eine Variable weiterzählen lassen. Dazu möchte ich einen ActionListener aufrufen, der die (bereits vorhandene) Variable dann um eins erhöht.
Der ActionListener kann jedoch nur auf "final" Variablen zugreifen und die sind wiederum nicht veränderbar.
Ich verstehe beim besten Willen nicht, wie ich das hinbekommen soll!
das final zählt nur für lokale Variablen und lokale Variablen zu ändern macht doch keinen Sinn,
die erstellende Methode wird zum Zeitpuntk des Buttonklicks doch hoffentlich längst beendet sein,
:roll: Ich verstehe garnichts mehr!
Konkret: Ich habe beispielsweise folgenden Code:
Code:
[...]
public class Main_Class {
public static void main(String[] args) throws Exception {
[...]
JButton weiter = new JButton("weiter");
int zaehler = 0
ActionListener weitergeklickt = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
zaehler = zaehler + 1;
}
};
weiter.addActionListener(weitergeklickt);
[...]
Der Action Listener soll die Variable zaehler um eins erhöhen.
In dem Programm geht es darum, dass nach dem weiter-Klick ein neuer Inhalt ausgegeben wird. Dieser Klick erfolgt dann mehrmals hintereinander und jedesmal kommt ein anderer Inhalt (wie z.B. bei Windows-Assistenten). Um den richtigen Inhal einzublenden muss der Action Listener dann natürlich wissen, der wievielte Klick das war. Also zählt er mit.
wenn die zaehler-Information nur innerhalb des ActionListeners benötigt wird, ist es doch noch unverständlicher, dafür die umgebende Methode zu benutzen,
quasi als Abladeplatz für eigene Variablen..
so nicht
aber so:
Code:
public class Test
{
public static void main(String[] args)
{
ActionListener weitergeklickt = new ActionListener() {
private int zaehler = 4;
public void actionPerformed( ActionEvent e ) {
zaehler = zaehler + 1;
}
};
}
}
Ich bin einfach zu dumm! Natürlich! Ich habe gerade Vergessen, dass man zwischen "ActionListener weitergeklickt = new ActionListener() {" und "public void actionPerformed( ActionEvent e ) {" auch Befehle etc. schreiben kann!
Danke für die schnelle Hilfe, super. Ich stand gerade auf dem Schlauch! Jetzt geht's und ich habs kapiert!
public class Test
{
public static void main(String[] args)
{
final int[] zaehlerArray = new int[1];
class WeiterAL
implements ActionListener
{
private int zaehler = 4;
public void actionPerformed(ActionEvent e)
{
zaehlerArray[0]++;
zaehler++;
}
public void decZaehler()
{
zaehler--;
}
};
final WeiterAL weitergeklickt = new WeiterAL();
final ActionListener back = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
zaehlerArray[0]--;
weitergeklickt.decZaehler();
}
};
}
}
So, jetzt hat wirklich alles geklappt!
Nur noch eine Verständnisfrage:
Warum funktioniert das mit dem Array, wenn ich statt dessen (zum Test) jedoch eine "normale" Variable einsetze, geht es nicht. Nur zum Verständnis, ich will es ja wirklich verstehen!
weil du beim array den _inhalt_ des arrays änderst, das array selbst ist ja noch das gleiche. würdest du versuchen der variablen ein anderes array zuzuweisen hättest du das selbe problem wie zuvor
Ok, super, jetzt weiß ich bescheid! Das war schon mal bei einer Programmspielerei von mir ein Problem und ich habe einfach keine Lösung gefunden! Aber jetzt weiß ich ja wie's geht!...