JavaFX String-Wert geht "verloren" - ratlos

expensne

Mitglied
Hallo Zusammen,

da auf den letzten Beitrag niemand geantwortet hat (verständlicherweise, da alles ein wenig unverständlich war, ich aber leider meine älteren Beiträge nicht mehr editieren konnte) und ich das Problem immer nocht nicht gelöst habe, hier nochmal (und hoffentlich zugänglicher).


Erklärung:
- Mithilfe eines Buttons wird ein Dialog aufgerufen der eine, vom Benutzer gewählte, Taste einliest und diese zusammen mit einem String, der durch das Dialog öffnen, festgelegt wird, speichert. Wenn der Dialog geöffnet wird, ist der String weapon noch auf dem Wert "glock".
Java:
    private void newDialogWindow(String name) throws Exception {
        Stage dialog = new Stage();
        Parent page = (Parent) FXMLLoader.load(getClass().getResource("FXMLbind.fxml"));
        Scene scene = new Scene(page);
        dialog.setScene(scene);
        dialog.setTitle("Bind: " + name);
        
        weapon = "glock";
        System.out.println("-> " + weapon);

        dialog.show();
    }



- Durch die System.out's während der Tastenwahl prüfe ich, ob auch die richigen Tasten gespeichert werden. Die gewählten Tasten werden auch gespeichert, aber der String weapon mit dem Wert "glock", ist weg.
Java:
    private void handleKeyPressed(KeyEvent event) {
        key = event.getCode();
        tfKeyPressed.setText(event.getCode().toString());
        
        System.out.println("--> " + key);
        System.out.println("--> " + weapon);
    }
Beispiel Ausgabe:
Java:
--> A
--> null
--> D
--> null
Es sollte aber folgendes rauskommen:
Java:
--> A
--> glock
--> D
--> glock



Das ganze ist mit JavaFX (+FXML) und dem SceneBuilder mit zugewiesenem DocumentController geschrieben.
Ich hoffe ich habe das jetzt alles gut genug erkärt das mir jemand helfen kann, da ich echt nicht mehr weiter weis.

Mit freundlichen Grüßen
Fabian



Hier der gesamte Code:
Java:
package buyscript;

import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;

/**
 *
 * @author dot
 */
public class FXMLDocumentController implements Initializable {

    private String weapon;
    private KeyCode key;
    
    @FXML 
    private TextField tfKeyPressed;

    @FXML
    private void handleGlockAction(ActionEvent event) {
        try {
            newDialogWindow("glock");
        } catch (Exception ex) {
            Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @FXML
    private void newDialogWindow(String name) throws Exception {
        Stage dialog = new Stage();
        Parent page = (Parent) FXMLLoader.load(getClass().getResource("FXMLbind.fxml"));
        Scene scene = new Scene(page);
        dialog.setScene(scene);
        dialog.setTitle("Bind: " + name);
        
        weapon = "glock";
        
        System.out.println("-> " + weapon);
        dialog.show();
    }
    
    @FXML
    private void handleKeyPressed(KeyEvent event) {
        key = event.getCode();
        tfKeyPressed.setText(event.getCode().toString());
        
        System.out.println("--> " + key);
        System.out.println("--> " + weapon);
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}
 
Zuletzt bearbeitet:
Also es ist immer noch ein Wirrwar!
Aber ich vermute es ist ganz einfach: Dein Dialog hat sicher einen eigenen Controller (die selbe Klasse, wie die, die du hier angegeben hast???) - aber es handelt sich dann um eine andere Instanz dieser Klasse und in der ist der String weapon einfach nicht initialisiert worden.
 
Also es ist immer noch ein Wirrwar!
Aber ich vermute es ist ganz einfach: Dein Dialog hat sicher einen eigenen Controller (die selbe Klasse, wie die, die du hier angegeben hast???) - aber es handelt sich dann um eine andere Instanz dieser Klasse und in der ist der String weapon einfach nicht initialisiert worden.

Vielen danke!
Das war's zwar nicht, aber durch deinen Denkanstoß mit dem Controller, hab ich etwas rumm probiert und der Fehler war, das ich dem Dialog (weil ich dachte das ich dafür ja eigendlich keinen eigenen Controller bräuchte) einfach den selben zugewiesen habe. Dadurch wurde zwar die Stringe im Controller gespeichert, aber mit dem Dialog der Controller neu aufgerufen und damit der String wieder auf null gesetzt.

Danke nochmal!
 

Zurück
Oben