Ich sehe, dass bereits einige Fragen zu diesem Thema gestellt wurden, aber ich habe noch keine Antwort auf meine Frage gefunden. Ich schreibe einen Code, wo der Benutzer etwas in JTextField
eingibt, und nach dem Klicken auf eine Schaltfläche wird sein Wort durch die Anzahl der Sterne mit der gleichen Anzahl von Zeichen ersetzt, die sein Wort hatte, zB "Tabelle" würde ersetzt durch "****" . ich habe es so aus:Eine Variable von ActionListener senden, also kann ein anderer ActionListener es verwenden
ask.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String guess = "";
String given = textGive.getText();
for (int i=0; i<given.length(); i++){
String asterisk = "*";
guess += asterisk;
textGive.setText(guess);
}
}
});
Ich weiß, dass ich dies in einer großen Weise nicht getan, aber ich wusste nicht, wie es besser zu machen. Irgendwelche Empfehlungen?
Nun möchte ich irgendwie beide Zeichenfolgen, das ursprüngliche Wort und das Sternchen außerhalb des Bereichs speichern, damit ich in einem anderen ActionListener darauf zugreifen und es weiter modifizieren kann. Bevor ich zuerst schreibe ActionListener
habe ich geschrieben String guess = ""
und String given = ""
aber es scheint, als ob es nichts getan hat. Also, in meinem zweiten ActionListener
möchte ich ihm die Zeichenfolge given
senden, die ich erhielt, wenn der Benutzer sein Wort eintippte.
guess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String attempt = textGuess.getText();
char att = attempt.charAt(0);
for (int i=0; i<5; i++){
if (given.charAt(i)==att){
textGuess.setText("Ok!");
}
}
}
});
Eklipse gibt mir Fehler sagen:
"Kann nicht an den nicht-final lokale Variable verweisen in einem umschließenden Umfang gegeben definiert".
Ich verstehe, dass ich given
endgültig zu machen, um brauchen sie weiter zu den acces, aber wie das tun, wenn die Variable aus der ersten ActionListener
auf Texteingabe abhängt? Gibt es eine andere Lösung für dieses Problem? Ich habe vor kurzem begonnen, Java zu benutzen, also kenne ich die Sprache nicht so gut.
Verwenden Sie einfach Felder nicht auf lokale Variablen! –
Was möchten Sie in erster Linie erreichen? Was du hier beschreibst, klingt für mich so, als ob du ein Passwort-Textfeld oder ähnliches machen möchtest? –
Eine Empfehlung, die Zeile 'textGive.setText (rate);' sollte außerhalb der for-Schleife platziert werden. –