JavaFX - Comment faire pour utiliser une méthode d'un contrôleur à partir d'un autre contrôleur?
De travail avec SceneBuilder. J'ai 2 étapes, chacune avec un contrôleur:
stage1Controller
,
stage2Controller
.
Stage1Controller :
public class Stage1Controller {
@FXML
private MenuItem translate;
@FXML
private Menu file;
@FXML
private Menu edit;
@FXML
private Menu help;
@FXML
private void handleTranslate (ActionEvent event){
translateFirstStage();
//HOW TO ACCESS THE stage2Controller setLabel()??
}
private void translateFirstStage(){
file.setText("Fichier");
edit.setText("Modifier");
help.setText("Aide");
}
}
Stage2Controller:
public class Stage2Controller {
@FXML
private Label lb;
private void setLabel(String string){
lb.setText("string");
}
}
Ici est de savoir comment les deux fxml les fichiers sont chargés dans Main.java classe à l'aide de 2 méthodes
(appelé dans Start(Stage primaryStage)
méthode):
public void firstStage() {
try {
//Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/stage1.fxml"));
rootLayout = (BorderPane) loader.load();
//Show the scene containing the root layout.
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
public void secondStage() {
try {
//Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/stage2.fxml"));
XD = (AnchorPane) loader.load();
//Show the scene containing the root layout.
Scene scene = new Scene(XD);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
- La
handleTranslate(ActionEvent event)
méthode est utilisé comme unOnAction
méthode pour laMenuItem translate
dans la première Étape, elle se traduit par l'affichage dans les deux étapes.
Comment puis-je mettre setLabel
dans handleTranslate
Méthode ? Grâce
Où sont les fxml fichiers correspondant aux contrôleurs chargés? (Vous avez besoin d'une référence à votre
les deux fxml les fichiers sont chargés dans la classe mainApp qui est séparé de ses deux.
Merci d'éditer votre question afin de montrer que le code.
Fait, j'ai ajouté la façon dont je l'ai chargé le 2 fxml fichiers.
Yup, merci; ça aide. Voir la réponse.
Stage2Controller
instance dans votre Stage1Controller
.)les deux fxml les fichiers sont chargés dans la classe mainApp qui est séparé de ses deux.
Merci d'éditer votre question afin de montrer que le code.
Fait, j'ai ajouté la façon dont je l'ai chargé le 2 fxml fichiers.
Yup, merci; ça aide. Voir la réponse.
OriginalL'auteur Calips | 2015-04-15
Vous devez vous connecter pour publier un commentaire.
Le "quick and dirty" est de lui donner le
Stage1Controller
une référence à laStage2Controller
:Maintenant dans votre application principale:
Une approche plus rigoureuse dans ce cas, toutefois, est de laisser les deux contrôleurs d'accès d'un modèle partagé de la classe, de stocker les données. Si vous représenter les données à l'aide de JavaFX propriétés observables, les contrôleurs peuvent écouter les changements sur les propriétés qu'ils occupent. Par exemple:
Maintenant vos contrôleurs ressemblera à ceci:
et
Et dans ce cas, votre application principale ressemble:
OriginalL'auteur James_D