2017-02-07 13 views
2

Ich bin Admin-Objekt in LoginController gettined. Es ist nicht null, es gibt kein Problem. Wenn ich dieses Objekt einstelle, funktioniert AdminController nicht. In meiner Initialisierung syso Ergebnis zeigt "null". Ich muss dieses Objekt in meinem anderen Controller verwenden. Mit Swing machte ich das in Controller-Konstruktoren und Swing-Konstrukteuren. Aber ich weiß nicht, wie ich das mit JavaFx machen kann. Entschuldigung für mein schlechtes Englisch. Aber wenn du Code siehst, wirst du mich verstehen.JavaFx Controller Set Objekt Anderer Controller

public class UserLoginController extends AbstractController { 

    @FXML 
    private Button joinBtn; 
    @FXML 
    private Button exitBtn; 
    @FXML 
    private Label statusLabel; 
    @FXML 
    private TextField userNo; 
    @FXML 
    private PasswordField password; 


    @FXML 
    void buttonEvent(ActionEvent event) { 

     if (joinBtn == event.getSource()) { 
      String userType = userNo.getText().substring(0, 2); 
      switch (userType) { 
      case "10": 
       Admin admin = DBContext.getInstance().admins().isUserExist(Integer.parseInt(userNo.getText()), password.getText()); 
       if(admin != null) { 
        final String fxml = "/educationManagement/view/AdminPanel.fxml"; 
        try { 
         FXMLLoader loader = new FXMLLoader(getClass().getResource(fxml)); 
         Parent root = (Parent) loader.load(); 
         AdminController adminController = loader.getController(); 
         adminController.setAdmin(admin); 
         Scene scene = new Scene(root); 
         Stage stage = (Stage) ((Node)event.getSource()).getScene().getWindow(); 
         stage.setTitle(admin.getFirstName() + " " + admin.getLastName()); 
         stage.setScene(scene); 
         stage.show(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
         System.out.println("fuck"); 
        } 

       } else { 
        statusLabel.setText("Kullanıcı Adı veya Şifre Yanlış"); 
        userNo.setText(""); 
        password.setText(""); 
       } 
       break; 

      case "40": 

       break; 

      case "50": 

       break; 

      default: 
       statusLabel.setText("Kullanıcı Adı Bulunamadı"); 
       break; 
      } 

     } 
    } 
} 


public class AdminController implements Initializable{ 

    private Admin admin; 

    @FXML 
    private TableView<Student> studentTable; 

    @FXML 
    private Label firstNameLbl; 

    public Admin getAdmin() { 
     return admin; 
    } 

    public void setAdmin(Admin admin) { 
     this.admin = admin; 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     System.out.println(admin); 

    } 

} 

Antwort

1

Die initialize-Methode aufgerufen wird, wenn die FXML Datei zu laden, sollten Sie eine andere Methode init in Admincontroller erstellen, die alle die initialize, die Sie mit dem Admin-Objekt benötigt, zu tun, und diese Methode nach dem Aufruf, um den Anruf Setter:

AdminController adminController = loader.getController(); 
adminController.setAdmin(admin); 
adminController.initController(); 
+0

Vielen Dank Zoltanik. Ich erstelle Load-Methode im Admin-Controller. Ich setze Admin und dann Lade aufrufen. Jetzt kann ich Benutzerinformationen in der zuerst gezeigten Komponentenszene zeigen. –

Verwandte Themen