Изменение размеров элементов графика (сеток) в anchorPane - PullRequest
0 голосов
/ 15 апреля 2019

Моя задача - создать график с изменяемым размером в полноэкранном режиме. График должен быть изменяемого размера, когда пользователь меняет окно программы, которое по умолчанию полноэкранное (компоненты и линии графика меняют свои размеры). Я понимаю график с AnchorPane: элементы (которые GridPane s) остаются в определенных координатах. Затем я делаю линии с помощью метода getBoundsInParent(). Вот схема графика:

image

Все хорошо, но проблема в том, что я не могу изменить свой график. Все компоненты остаются с их размерами; переменные prefSize, minSize, maxSize не изменяют размер. Я пытаюсь использовать параметры AnchorPane.setTopAnchor и т. Д., Но они не меняют размер, а только перемещают компонент GridPane. Также я стараюсь использовать GridPane в качестве макета вместо AnchorPane. Но мои строки, связанные с методами component.getBoundsInParent(), разлетаются в случайных позициях (я понимаю, что метод getBoundsInParent() возвращает другие координаты, которые с GridPane).

Мой проект находится на рабочих компьютерах без интернета, и я не могу его показать. Я думаю, что способ связывания линий между графиками полезно показывать в блоке кода, потому что это является причиной перемещения линий, когда компоненты находятся в макете GridPane:

line.startXProperty().bind(source.layoutXProperty().add(source.getBoundsInParent().getWidth() / 2.0));    
line.startYProperty().bind(source.layoutYProperty().add(source.getBoundsInParent().getHeight() / 2.0));
line.endXProperty().bind(target.layoutXProperty().add(target.getBoundsInParent().getWidth() / 2.0));
line.endYProperty().bind(target.layoutYProperty().add(target.getBoundsInParent().getHeight() / 2.0));

Как изменить размер графа с помощью созданных мной элементов и линий, связанных с этими элементами. Может быть, это свойства AnchorPane или GridPane? Или какое-то связывание начальных и конечных точек линий?

1 Ответ

0 голосов
/ 15 апреля 2019

Привязки должны основываться на свойствах или других реализациях ObservableValue, поэтому изменения в их значениях правильно отслеживаются.Прямые вызовы методов, такие как source.getBoundsInParent().getWidth() / 2.0, оцениваются только один раз, в тот момент, когда код создает привязку, поэтому изменения ширины никогда не видны.

line.startXProperty().bind(
    source.layoutXProperty().add(
        source.widthProperty().divide(2)));
line.startYProperty().bind(
    source.layoutYProperty().add(
        source.heightProperty().divide(2)));

Если source и target не являются регионами итаким образом, у вас нет свойства width, вы можете использовать Bindings для создания динамической привязки их границ:

DoubleBinding width = Bindings.createDoubleBinding(
    () -> source.getLayoutBounds().getWidth(), 
    source.layoutBoundsProperty());

line.startXProperty().bind(
    source.layoutXProperty().add(
        Bindings.createDoubleBinding(width.divide(2)));

DoubleBinding height = Bindings.createDoubleBinding(
    () -> source.getLayoutBounds().getHeight(), 
    source.layoutBoundsProperty());

line.startYProperty().bind(
    source.layoutYProperty().add(
        Bindings.createDoubleBinding(height.divide(2)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...