2013-07-02 6 views
3

У меня есть табло, где динамически загружаются закладки. Каждая вкладка имеет анкерную панель в качестве ее содержимого. Это отлично работает, за исключением одной маленькой детали: при изменении размера основного приложения содержимое вкладки не изменяется.Изменение содержимого вкладки

Предположим, что я максимизирую свое приложение, содержимое вкладки сохраняет свой «маленький» размер. Как я могу вызвать изменение размера содержимого вкладки, учитывая, что его корень является привязкой?

Я новичок в мире javafx, и, по моему невежеству, я попробовал обернуть анкерную панель в hbox и установить, что, поскольку содержимое вкладки бесполезно.

Любые идеи?

ответ

0

Это пример изменения размера компонента, но идея такая же.

Rectangle rec = new Rectangle(); 
    rec.widthProperty().bind(stackPane.widthProperty().subtract(50)); 
    rec.heightProperty().bind(stackPane.heightProperty().subtract(50)); 

Вы должны получить размер основного этапа и с .bind(stackPane.heightProperty().subtract(50)); вы можете уменьшить размер динамически.

Но я новичок в этой технологии, и кто-то более опытный может дать вам более точный ответ.

+0

Это была моя первая мысль, но я думаю, что это невозможно сделать, поскольку свойство width/heigh доступно только для чтения. – nablex

0

Положите ограничения AnchorPane на TabPane (не вкладки, остерегайтесь), чтобы он изменялся в соответствии с его контейнером AnchorPane.

Если вы используете SceneBuilder, раздел Layout в экземпляре TabPane поможет вам. Если вы создаете также TabPane динамически, вы можете установить это constaints, как AnchorPane.setLeftAnchor(theTabPane, ...), AnchorPane.setTopAnchor(theTabPane, ...) и т.д.

+0

Это, похоже, не работает. Согласно спецификации, я думаю, что якоря используются для привязки дочерних элементов к якорной планете, а не к привязке к ее родителям. – nablex

+0

С контейнером AnchorPane я имел в виду контейнер TabPane, а не контейнер содержимого одной Tab. Итак, если вы поместите вышеупомянутые ограничения, tabPane изменит размер и, следовательно, содержимое вкладки (по крайней мере, я надеюсь). – Ramazan

0

Я в настоящее время есть рабочее решение, хотя я уверен, что это не самый чистый способ сделать это:

  final Pane root = loader.getRoot(); 
      tbsCore.widthProperty().addListener(new ChangeListener<Number>() { 
       @Override 
       public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number newValue) { 
        root.setPrefWidth(newValue.doubleValue()); 
       } 
      }); 
      tbsCore.heightProperty().addListener(new ChangeListener<Number>() { 
       @Override 
       public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number newValue) { 
        root.setPrefHeight(newValue.doubleValue()); 
       } 
      }); 

Обратите внимание, что «root» - это панель, которую я хочу поместить на вкладку, в то время как «tbsCore» является TabPane.

Смежные вопросы