Усилить узел, чтобы выложить! (widthProperty () возвращает 0) [duplicate]

Разница между Thread и runnable. Если мы создаем Thread с использованием класса Thread, тогда количество потоков равно количеству созданного нами объекта. Если мы создаем поток, реализуя интерфейс runnable, мы можем использовать один объект для создания нескольких потоков. Один объект разделяется несколькими Thread.So он будет потреблять меньше памяти

. Поэтому в зависимости от требования, если наш данные не являются сенситивными. Таким образом, он может быть разделен между несколькими Thread, которые мы можем использовать интерфейс Runnable.

10
задан NatNgs 22 August 2016 в 10:48
поделиться

1 ответ

Что вам нужно сделать:

  1. Создайте узлы, которые должны быть размещены в VBoxes.
  2. Добавьте их в некоторые сцена (это может быть просто новая сценарическая сцена, не привязанная к сцене, но имеющая те же правила CSS, что и ваша основная сцена).
  3. Вызовите applyCss() и layout() на каждом из узлов (или
  4. Измерение границ компоновки каждого из узлов.
  5. Добавить узлы в VBoxes в вашей реальной сцене в соответствии с вашим алгоритмом компоновки.

Связанный

Чтобы узнать, как измерить размер узла, см. ответ на:

Фон

Схема JavaFX вычисления выполняются с помощью CSS и макета. Обычно это происходит как часть импульса (своего рода автоматизированный 60-секундный тик во внутренней системе JavaFX, который проверяет наличие каких-либо грязных объектов в сцене, которым требуется новый css или макет, применяемый к ним). В большинстве случаев вы можете просто указать изменения, которые вы хотите для сцены, и позволить автоматическому механизму компоновки импульсов обрабатывать макет в это время; это довольно эффективно, так как это означает, что любые изменения между импульсом суммируются, и вам не нужно вручную запускать макеты прохода. Однако, когда вам нужно фактически получить размер вещей до того, как произойдет макет (как в вашем случае), вам нужно вручную запустить приложение CSS и макет, прежде чем пытаться запросить высоту и ширину узла.

Документация

К сожалению, в настоящее время разбит подробный Java Juadoc Java 8u20 для метода node.applyCSS() , поэтому я воспроизведу образец, который находится здесь в коде Javadoc, поэтому вы можете увидеть рекомендуемое использование в контексте. Для следующего выпуска Java-версии (8u40) сломанный javadoc исправлен как часть RT-38330. Javadoc отсутствует для нескольких методов класса Node , поэтому с этой версией вы сможете найти следующий текст в JavaFX javadoc:

При необходимости примените стили к этому узлу и его дочерним элементам, если они есть. Этот метод обычно не нужно вызывать напрямую, но может использоваться в сочетании с layout() для определения размера узла перед следующим импульсом или если сцена не находится в рабочей области.

При условии, что сцена Node не равна NULL, CSS применяется к этому узлу независимо от того, является ли состояние этого узла Node чистым. Стили CSS применяются от самого верхнего родителя этого узла, состояние CSS которого отличается от чистого, что может повлиять на стиль других узлов. Этот метод не работает, если узел не находится в Сцене. Сцена не должна находиться в стадии.

Этот метод не вызывает метод layout(). Как правило, вызывающий абонент будет использовать следующую последовательность операций.

parentNode.applyCss();
parentNode.layout();

В качестве более полного примера в следующем коде используются applyCss() и layout(), чтобы найти ширину и высоту кнопки до Этап показан. Если либо вызов applyCss(), либо вызов layout() закомментированы, вызовы getWidth() и getHeight() будут возвращать ноль (пока не будет показано некоторое время после этапа).

public void start(Stage stage) throws Exception {
   Group root = new Group();
   Scene scene = new Scene(root);

   Button button = new Button("Hello World");
   root.getChildren().add(button);

   root.applyCss();
   root.layout();

   double width = button.getWidth();
   double height = button.getHeight();

   System.out.println(width + ", " + height);

   stage.setScene(scene);
   stage.show();
}

Альтернативный

Другой вариант здесь - переопределить метод layoutChildren() родительского узла, который является «Вызывается во время макета перейдите в макет детей в этом Родитель. ". При этом также может потребоваться переопределить методы computePrefHeight() , а также другие методы расчета для prefWidth и min & amp; максимальная высота и amp; ширина. Подробное описание использования этого подхода является сложным и выходит за рамки этого ответа.

17
ответ дан Community 19 August 2018 в 11:33
поделиться
  • 1
    он отлично работает, спасибо большое! :) – iconer 2 October 2014 в 16:29
  • 2
    очень полный ответ для новых пчел, что облегчает сущность обучения – repzero 15 March 2018 в 15:56
Другие вопросы по тегам:

Похожие вопросы: