Buona sera a tutti,FXML multipla con i controller, la quota oggetto
ho trovato un sacco di posti già su questo argomento, ma ancora non riesce a passare un oggetto da Controller1 a controller2. C'è da qualche parte un tutorial completo o qualche progetto di esempio che fa questo?
ho ottenuto fino a questo punto fino a quando mi sono bloccato:
Paese classe
public class Country {
private SimpleStringProperty country = new SimpleStringProperty("");
//Constructor
public Country() {
}
//GETTERS
public String getCountry() {
return country.get();
}
//SETTERS
public void setCountry(String value) {
country.set(value);
}
@Override
public String toString() {
return getCountry();
}
}
All'avvio del programma, il FXML principale viene caricato (Sample.fxml). Questo contiene un riquadro dei bordi con una barra dei menu nel pannello superiore e un riquadro dei contenuti al centro. All'inizializzazione creo un nuovo oggetto Paese e lo memorizzo in una variabile globale. Ho un metodo che carica un altro FXML nel riquadro del contenuto, quando una voce di menu si fa clic:
SampleController.java
public class SampleController implements Initializable {
@FXML
private Pane pContent;
private Country c;
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
System.out.println(c); //this prints Belgium, which is correct
URL url = getClass().getResource("Sub1.fxml");
FXMLLoader fxmlloader = new FXMLLoader();
fxmlloader.setLocation(url);
fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
pContent.getChildren().clear();
pContent.getChildren().add((Node) fxmlloader.load(url.openStream()));
}
@Override
public void initialize(URL url, ResourceBundle rb) {
c = new Country();
c.setCountry("Belgium");
}
public Country getCountryFromSampleController(){
return c;
}
}
Ora desidero cogliere l'oggetto Paese in cui il Sub1.fxml ottiene caricato , il che significa che ho bisogno di recuperare l'oggetto paese initialize():
Sub1Controller.java
public class Sub1Controller implements Initializable {
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
SampleController sp = new SampleController(); //I don't know how to fetch the original SampleController object
System.out.println(sp.getCountryFromSampleController());
//this prints null, which is ofcourse logical because I make a new SampleController object.
}
}
La domanda che ho, come posso ottenere l'oggetto SampleController 'originale' così posso usare il metodo getCountryFromRoot() per recuperare l'oggetto Paese con valore Belgio? Ho cercato su questo argomento per ore e ore e ho letto ogni post su StackOverflow a riguardo, ma sembra che non trovo il link mancante ... qualsiasi aiuto (preferibilmente con questo codice) è apprezzato!
Ci scusiamo per il lungo post, ho cercato di essere il più completo possibile il resto Non capirò mai ...
Grazie mille volte Sergey, finalmente tutto ha un senso. Questa è la prima volta che devo creare una grande applicazione, ma sto ancora lottando su come "costruirla". Ho anche un'altra domanda di sicurezza che vorrei chiedere, ma non sono sicuro se questo è il sito giusto per chiederlo (non è relativo al codice) – Perneel
Ehi, Sergey, mi dispiace di portare su questo vecchio argomento. Funziona ancora come un incantesimo ma quello che mi chiedo ... C'è un modo per massimizzare la larghezza e l'altezza dall'oggetto Node '(Nodo) fxmlloader.load (url.openStream())' quindi è legato al larghezza e altezza del riquadro (pContent)? – Perneel
dovrebbe funzionare automaticamente, in caso contrario, fornire meglio il codice in una domanda separata –