Вы не можете установить более одного контроллера в файле FXML с помощью (fx:controller="")
, вместо рассмотреть вливание контроллер вручную, в основном есть два способа:
Использование setController метода без упоминания контроллер внутри файла FXML:
FXMLLoader loader = new FXMLLoader();
URL location = getClass().getClassLoader().getResource("fxml/ClientArea.fxml");
loader.setLocation(location);
loader.setController(new ClientArea());
// loader.setController(new Undecorator());
loader.load();
более целесообразно использовать метод setControllerFactory:
первых, убедитесь, что оба контроллера ClientArea
и Undecorator
реализовать интерфейс (Icontroller
, содержащий методы обработчиков событий), упомянутые в FXML
файле (fx:controller="IController")
, затем выберите контроллер при загрузке вашего Вид из FXML
файла:
FXMLLoader loader= new FXMLLoader();
URL location = getClass().getClassLoader().getResource("fxml/ClientArea.fxml");
loader.setLocation(location);
loader.setControllerFactory(new Callback<Class<?>, Object>() {
public Object call(Class<?> p) {
return new ClientArea();
// return new Undeorator();
}
});
loader.load();
Невозможно. Если вы можете объяснить, почему вам нужно добавить два контроллера, возможно, мы сможем найти другое решение. – mcaaltuntas
У меня есть четыре файла ... 2 файла '.java' (' ClientArea.java' и 'Undecorator.java') и 2 файла' .fxml' ('ClientArea.fxml' и' Undecorator.fxml') 'ClientArea. fxml' имеет 'fx: controller =" "' 'ClientArea.java' и' Undecorator.fxml' имеет 'fx: controller =" "' 'Undecorator.java' Я хочу использовать то, что находится в' ClientArea. fxml' 'Undecorator.java' – Perco
@JacksonMireski Только что обновил мой ответ, надеюсь, что помощь. – tarrsalah