Ich habe zwei FXML
Dokumente jeweils eine Ansicht darstellt, nennen wir sie View1
und View2
, und ich habe jedes in einer separaten Tab
platziert, (Tab1
und Tab2
) innerhalb eines TabPane
.JavaFX: Rufen Sie einen Knoten
Jetzt im Controller1
von View1
Ich habe ein Ereignis, das die selectedItem
meine TabPane
Tab1
-Tab2
wechseln. Meine Frage ist, wie kann ich auf meine TabPane
von Controller1
Im Allgemeinen zugreifen. Wie erhalten wir einen bestimmten Node
in Javafx
.
bearbeiten Ansicht1
<VBox fx:controller="controllers.Controller1">
<Button onAction="#openView2"/>
</VBox>
Controller1
public class Controller1{
public void openView2(){
//What should I do here
}
}
Mainview
<TabPane fx:id="tabPane" fx:controller="controllers.MainController"/>
MainController
public class MainController implements Initializable {
@FXML
public TabPane tabPane;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
try {
tabPane.getTabs().add(createView1Tab());
tabPane.getTabs().add(createView2Tab());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected Tab createView1Tab() throws IOException {
Tab tab = new Tab();
tab.setContent(FXMLLoader.load(getClass().getResource("/views/View1.fxml")));
return tab;
}
protected Tab createView2Tab() throws IOException {
Tab tab = new Tab();
tab.setContent(FXMLLoader.load(getClass().getResource("/views/View2.fxml")));
return tab;
}
}
Im Allgemeinen sollten Sie nicht auf Steuerelemente aus einer Ansicht im Controller für eine andere Ansicht zugreifen. Ändern Sie stattdessen beobachtbare Daten und beobachten Sie diese Daten dort, wo Sie sie benötigen. Wenn Sie Ihre Frage mit einem [MCVE] bearbeiten können, der das Problem demonstriert, wäre es einfacher, hier eine tatsächliche Antwort zu geben. –
Danke für die Bearbeitung, aber können Sie es lesen und die Tippfehler korrigieren? Sollte 'openView1()' 'openView2()' nicht sein?Und ich nehme an, 'mainController' in MainView soll' MainController' sein? –