У меня есть два FXML
документов каждый из них представляет собой вид, давайте назовем их View1
и View2
, и я поместил каждый в отдельном Tab
, (Tab1
и Tab2
) внутри TabPane
.JavaFX: Получение узла
Сейчас в Controller1
из View1
у меня есть событие, которое будет переключать selectedItem
из моих TabPane
с Tab1
в Tab2
. Мой вопрос в том, как я могу получить доступ к моим TabPane
от Controller1
В целом. Как мы получаем Node
в Javafx
.
Редактировать View1
<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;
}
}
В общем, вы просто не должны обращаться к элементам управления с одного вида в контроллере для другого вида. Вместо этого измените некоторые наблюдаемые данные и понаблюдайте за теми данными, где вам нужно. Если вы можете [изменить] свой вопрос с помощью [MCVE], демонстрирующего проблему, было бы легче дать реальный ответ здесь. –
Спасибо за редактирование, но можете ли вы проверить его и исправить опечатки? Не следует ли 'openView1()' быть 'openView2()'?И я предполагаю, что 'mainController' в MainView должен быть' MainController'? –