[SWT] MessageBox mit Message aus einer Textbox

hubbl

Erfahrenes Mitglied
Hallo,
ich hab mir vorgenommen mich mal näher mit Java zu beschäftigen und habe mein erstes Problem.
Ich habe eine Textbox und möchte durch einen Klick auf einen Button den Text aus der Textbox als Message einer MessageBox setzen.
Mein Versuch sieht folgendermaßen aus:
PHP:
Text txt = new Text(shell, SWT.SINGLE);
        
        Button b = new Button(shell, SWT.PUSH);
        b.setText("Klick mich!");
        b.addSelectionListener(new SelectionAdapter(){
            public void WidgetSelected(){
                MessageBox box = new MessageBox(shell);
                box.setMessage(txt.getText());
            }        
        });
Als Fehlermeldung erhalte ich "Cannot refer to a non-final variable txt inside an inner class defined in a different method".

Wenn ich das nicht so lösen kann, wie sonst?

Danke schon einmal für jegliche Hilfe.

Gruß Dennis
 
Du kannst schon... hör einfach auf die Fehlermeldung und schreibe:
Java:
final Text txt = new Text(shell, SWT.SINGLE);

Zur Erklärung: Du meldest den Listener zum Zeitpunkt x an. Verwendet wird er aber erst wenn du zum Zeitpunkt y auf den Button klickst. Daher muß Java irgendwie sicher gehen können dass txt zwischendurch nicht neu zugewiesen wurde. Das geht z.B. mit Final.

Andere Möglichkeit wäre txt als Feld der Klasse zu hinterlegen und dann mit
Java:
DeineKlasse.this.txt.getText()
zu arbeiten.

Noch ne ähnliche Möglichkeit: txt als Feld anlegen und eine Methode showMethodBox anlegen die du im widgetSelected aufrufst. Das so zu lösen ist schön falls du an anderer Stelle genau das nochmal machen willst.

Oder du könntest dir eine Klasse MySelectionAdapter erstellen die SelectionAdapter erweitert und der du txt im Konstruktor übergeben kannst.
 

Neue Beiträge

Zurück