Надеюсь получить некоторые ответы относительно наличия операторов fx: include для каждой вкладки в tabpane. Мне удалось с легкостью отобразить контент, но методы ссылок связанного класса контроллера просто дают мне исключение nullpointerreference, независимо от того, как я его структурирую. Контроллеры включенных макетов FXML не имеют ни метода конструктора, ни метода initialize(), нужны ли они? Я пробовал разные вещи, но всегда получал такое же исключение.JavaFX 8 - Таблицы и вкладки с отдельными FXML и контроллерами для каждой вкладки
Что я просто делал, это добавить слушателя изменений в tabpane и когда была нажата вкладка, я хотел заполнить некоторые текстовые поля некоторыми значениями, полученными от глобального доступного массива. Обратите внимание: проблема с arraylist не является проблемой, поэтому выполнение этой операции с использованием основного контроллера работает нормально.
Я собираюсь добавить пример кода в ближайшее время, но не могу прямо сейчас. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, иначе я отправлю код позже сегодня.
* Редактировать, вот мой пример кода, взятый из другого потока здесь, в StackOverflow. JavaFX TabPane - One controller for each tab
TestApp.java:
public class TestApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = new Scene(new StackPane());
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/MainTestWindow.fxml"));
scene.setRoot(loader.load());
MainTestController controller = loader.getController();
controller.init();
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Главный контроллер, где я хочу, чтобы ссылаться на контроллеры суб.
public class MainTestController {
@FXML private TabPane tabPane;
// Inject tab content.
@FXML private Tab fooTabPage;
// Inject controller
@FXML private FooTabController fooTabPageController;
// Inject tab content.
@FXML private Tab barTabPage;
// Inject controller
@FXML private BarTabController barTabPageController;
public void init() {
tabPane.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Tab> observable,
Tab oldValue, Tab newValue) -> {
if (newValue == barTabPage) {
System.out.println("Bar Tab page");
barTabPageController.handleButton();
} else if (newValue == fooTabPage) {
System.out.println("Foo Tab page");
fooTabPageController.handleButton();
}
});
}
}
.fxml
Главный вид в
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>
<TabPane fx:id="tabPane" fx:controller="controller.MainTestController" xmlns="http://javafx.com/javafx/8.0.40"
xmlns:fx="http://www.w3.org/2001/XInclude">
<tabs>
<Tab fx:id="fooTabPage" text="FooTab">
<fx:include source="fooTabPage.fxml"/>
</Tab>
<Tab fx:id="barTabPage" text="BarTab">
<fx:include source="barTabPage.fxml"/>
</Tab>
</tabs>
</TabPane>
FooTab:
public class FooTabController {
@FXML private Label lblText;
public void handleButton() {
lblText.setText("Byebye!");
}
}
.fxml FooTab в:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<VBox xmlns:fx="http://www.w3.org/2001/XInclude" fx:controller="controller.FooTabController">
<Label fx:id="lblText" text="Helllo"/>
<Button fx:id="btnFooTab" onAction="#handleButton" text="Change text"/>
</VBox>
BarTab:
public class BarTabController {
@FXML private Label lblText;
public void handleButton() {
lblText.setText("Byebye!");
}
}
.fxml BarTab в
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<VBox xmlns:fx="http://www.w3.org/2001/XInclude" fx:controller="controller.BarTabController">
<Label fx:id="lblText" text="Helllo" />
<Button fx:id="btnBarTab" onAction="#handleButton" text="Change text"/>
</VBox>
выше OnAction как для FooTab и BarTab работы с соответствующими кнопками. Когда этот метод (handleButton) является ссылкой с главного контроллера, это когда я получаю исключение.
«ссылки на методы соответствующего класса контроллера просто не дает мне исключение nullpointerreference независимо от того, как я структурировать». Можете ли вы изменить свой вопрос, чтобы показать, что вы пробовали? –
Теперь я обновил тестовый код, который у меня есть, пожалуйста, сообщите –