Hallo!
ich mache über ein Textfeld eine Eingabe, wenn diese Eingabe in dem Label vorhanden ist soll sie dort rein geschrieben werden.
Ich setze so den Text neu, also das komplette Label wird ersetzt durch den Buchstaben.
Wie bekomme ich es so hin, dass nur der einzelne buchstabe ersetzt wird?
Java:
String tF = textField.getText();for(int i =0; i < word.length(); i++){if(word.charAt(i)== a){
label.setText(hiddenWord.replaceAll(word , tF));}
Ich bin mir nicht ganz sicher, ob ich das richtig verstanden habe. In das Textfeld soll nur 1 Buchstabe eingetippt werden können. Und dann vergleichst du, ob dieser Buchstabe schon in dem Wort im Label drin enthalten ist. Wenn ja, ersetzt du das Wort im Label durch diesen Buchstaben?
Dazu könntest du einen DocumentListener an das Textfeld hinzufügen, welches darauf reagiert, wenn etwas dort eingegeben wird. Und dann dort durch die Zeichen des Wortes im Label gehen und schauen, ob der Buchstabe dort vorkommt. Hast du ja eigentlich auch schon in deiner for-Schleife. Musst halt nur das Zeichen aus dem Textfeld holen. (bei dir steht da gerade noch == a)
Und dann mit setText() im Label den Text reinschreiben, wenn in der Schleife ein Treffer erzielt wurde.
Das Blau markierte ist ein Link, den kann man klicken und kommt, bei diesem von mir geposten Link auf ein Topic in diesem Forum, was eine ziemlich ähnliche Problematik behandelt ;-) dahinter habe ich eine ergänzung, eine zusätzliche codezeile geschrieben, um die du es erweitern musst, um den inhalt auf dein Label zu schreiben, das geht nämlich mit setText ;-)
Java:
String[]orginal={"h","a","l","l","o"};// einmal das array mit deinem orginal wortString[]display={"_","_","_","_","_"};// und dein array mit den unterstrichen//***************************String buchstabe= textField.getText();//NEUE ANPASSUNG wert aus deinem Textfeld//***************************for(int i=0;i<orginal.length;i++){// durch dein wort gehenif(orginal[i].equals(buchstabe){// schauen ob an der stelle der buchstabe vorkommt
diplay[i]=buchstabe;// in der anzeige den buchstaben austauschen}}//***************************
label.setText(Array.toString(diplay));// NEUE ANPASSUNG Anzeigen in deinem label//***************************
String[]orginal={"h","a","l","l","o"};// einmal das array mit deinem orginal wortString[]display={"_","_","_","_","_"};// und dein array mit den unterstrichen//***************************String buchstabe= textField.getText();//NEUE ANPASSUNG wert aus deinem Textfeld//***************************for(int i=0;i<orginal.length;i++){// durch dein wort gehenif(orginal[i].equals(buchstabe){// schauen ob an der stelle der buchstabe vorkommt
diplay[i]=buchstabe;// in der anzeige den buchstaben austauschen}}//***************************
label.setText(Array.toString(diplay));// NEUE ANPASSUNG Anzeigen in deinem label//***************************
Schau mal den Queltext an (Zeile 12) display, weil orginal ist ja dein orginales/gesuchtes wort, also wenn es galgenmänchen werden soll, wonach es aussieht, und display, wie ich fand ein deutlicher name, ist zum anzeigen gedacht, der hat deine unterstriche anstelle von buchstaben, außer es wurde der richtige buchstabe eingegeben ;-)
Das wort ist nich fest, dass heißt da könnte auch was anderes drinne stehen außer hallo, das wort müsste in einem array gespeichert werden und die buchstaben dann ersetzt werden durch Striche, also funktioniert das so nicht.
Probier doch erst mal, ob du es so hinbekommst, mit einem fest eingetragenen Wort. Danach kannst du es doch so umbauen, dass auch andere Wörter dort vorkommen können.
Verstehe dein PROBLEM nicht, du kannst ja was anderes in den String schreiben, daran scheitert es nicht, das ist ja nur für dein BEISPIEL in der HOFFNUNG du VERSTEHSTdann wie es FUNKTIONIERT was aber nicht der Fall ist
Das mit dem ersetzen wurde dir glaube ich schon mehrmals erklärt, aber ich kann es ja nochmal machen ;-)
Java:
//GLOBALE VARIABLENString[]orginal;String[]display;//FUNKTION EINLESENString wort=textField.getText();//einlesen deines zu lösenden wortesthis.orginal=newString[word.length()];//array der größe erstellenthis.display=newnewString[word.length()];//array der größe erstellenfor(int i =0; i < word.length(); i++){//durch dein Wort gehen
orginal[i]=""+word.charAt(i);// in orginal speichern
display[i]="_";//"_" speichern
}//FUNKTION LÖSENString buchstabe= textField.getText();//NEUE ANPASSUNG wert aus deinem Textfeldfor(int i=0;i<orginal.length;i++){// durch dein wort gehenif(this.orginal[i].equals(buchstabe){// schauen ob an der stelle der buchstabe vorkommtthis.diplay[i]=buchstabe;// in der anzeige den buchstaben austauschen}}
label.setText(Array.toString(diplay));// NEUE ANPASSUNG Anzeigen in deinem label
wenn du, so wie ich es beschrieben habe, die beiden arrays global gemacht hast, werden die Arrays und somit dein gelöstes wort gespeichert
nach der eingabe a sieht es so aus _ a _ _ _
nach einer weiteren eingabe z.B. o sieht es so aus _ a _ _ o
Die eingegebenen buchstaben an sich werden nicht gespeichert, aber wenn man das wollte könnte man das auch machen, interessanter sind aber wenn dan die falsch eingegebenen buchstaben, wie z.B. das w _ a _ _ o ist weiter deine ausgabe, aber ein fehlversuch und du könntest dir das speichern
publicString[]stringArray(String s){String[] stringArray =newString[s.length()];for(int i =0; i < stringArray.length; i++){
stringArray[i]= s.substring(i, i +1);}return stringArray;}
Funktion ersetzen
Java:
publicString[]replaceArrayElement(String s){String[] stringArray =newString[s.length()];for(int i =0; i < s.length(); i++){
stringArray[i]=""+ s.charAt(i);
stringArray[i]="_";}return stringArray;}
und dann rufe ich die hier auf mit den GLOBALEN variablen
Java:
original = strA.stringArray(hiddenWord);
display = replace.replaceArrayElement(hiddenWord);for(int i =0; i < original.length; i++){if(original[i].equals(buchstabe)){
display[i]= buchstabe;}}
label.setText(Arrays.toString(display));
original = strA.stringArray(hiddenWord);
display = replace.replaceArrayElement(hiddenWord);// hiermit überschreibst du es dir immer wieder wenn die funktion des buchstabens eingeben aufgerufen wird, das ist wohl nicht sin und zweck oder??for(int i =0; i < original.length; i++){if(original[i].equals(buchstabe)){
display[i]= buchstabe;}}
label.setText(Arrays.toString(display));
display, deshalb steht es dahinter in Klammern.
Arrays ist groß geschrieben und unterstrichen, das ist ein Link klick den an. Das ist eine Helferklasse für den Umgang mit arrays und kein variablenname.
Code:
Arrays.toString(deinArray)
wandelt dein Array in einen schön lesbaren String um.
du musst dir doch irgendwo merken wie weit du schon warst und dann nicht mehr vom ursrungswort ausgehen sondern vom aktualisierten
sowas in die richtung, keine ahnung wie das programm ausßen rum aussieht
Java:
//global einmal
original = strA.stringArray(hiddenWord);
label.setText(hiddenWord);// bei jeder eingabe
display = replace.replaceArrayElement(label.getText());for(int i =0; i < original.length; i++){if(original[i].equals(buchstabe)){
display[i]= buchstabe;}}
label.setText(Arrays.toString(display));
//****************//**Zur Verdeutlichung Eingefügter Code//****************publicclass galgenmaenchen{//GLOBALE VARIABLENprivateString[]orginal;privateString[]display;//****************//**Zur Verdeutlichung Eingefügter Code//****************publicvoid getNewWordFromTextField{//FUNKTION EINLESENString wort=textField.getText();//einlesen deines zu lösenden wortesthis.orginal=newString[word.length()];//array der größe erstellenthis.display=newnewString[word.length()];//array der größe erstellenfor(int i =0; i < word.length(); i++){//durch dein Wort gehen
orginal[i]=""+word.charAt(i);// in orginal speichern
display[i]="_";//"_" speichern
}}//****************//**Zur Verdeutlichung Eingefügter Code//****************publicvoid loesenDurchEingabeInTextFeld{//FUNKTION LÖSENString buchstabe= textField.getText();//NEUE ANPASSUNG wert aus deinem Textfeldfor(int i=0;i<orginal.length;i++){// durch dein wort gehenif(this.orginal[i].equals(buchstabe){// schauen ob an der stelle der buchstabe vorkommtthis.diplay[i]=buchstabe;// in der anzeige den buchstaben austauschen}}
label.setText(Array.toString(diplay));// NEUE ANPASSUNG Anzeigen in deinem label}