JavaFX, почему значения пикселей в панелях привязки удваиваются?Кроме того, что произойдет, если вы положите в 10,5 например? - PullRequest
0 голосов
/ 12 апреля 2019

Недавно я начал работать с якорными панелями javaFX и увидел, что значение расстояния является двойным. Теперь мой вопрос: почему они выбрали double вместо int? Я имею в виду, что это количество пикселей, и вы не можете переместить содержимое на полпикселя, насколько я знаю. Небольшой пример:

AnchorPane.setTopAnchor(something, 10.5);

В этом примере будет установлен верхний якорь на 10,5 пикселей. Итак, еще раз, почему они решили сделать его двойным, и что именно я изменил, когда я вставил 10,5 вместо 10,0?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Все координаты макета в JavaFX - double с. В зависимости от свойств конечная позиция ребенка может фактически округляться до целочисленного значения (см. свойство snapToPixel ). (AnchorPane, похоже, не делает этого, а просто использует нецелые значения для позиций / ширины дочерних элементов.)

Кроме того, могут быть преобразования, которые выравнивают узел по пикселям, например, масштабирование в 2 раза.

Как правило, не всегда удается идеально выровнять «пиксели узла» по пикселям дисплея во всех случаях. (Рассмотрим поворот на 45 °.)

Если часть Node не полностью покрывает пиксель после того, как все преобразования были применены, результатом является цвет прорисовываемого узла с непрозрачностью, которая зависит от части пикселя, охватываемой узлом например, край прямоугольника с позицией 10,5 приводит к тому, что цвет узла рисуется на «пикселе 10» с полупрозрачностью.

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

Я не знаю, какова реальная причина этого, но, как сказано в документах,

AnchorPane позволяет привязывать края дочерних узлов к смещению от краев области привязки.Если область привязки имеет границы и / или набор отступов, смещения будут измеряться от внутреннего края этих вставок. docs

, поэтому кажется, что он вычисляет разницу между дочерним узлом и краями областей привязки, чтобы определить, где размещать дочерний узел, и всегда вычисляются расстояния, вычисляемые как float / doubleформаты!

Но в коде все кажется одинаково, они оба делают одно и то же

...