В зависимости от ожидаемой детализации ответа на этот вопрос причина может быть простой:
Он превысит все пределы и больше не допустит разумных вычислений.
Когда класс отвечает за компоновку и должен разместить два компонента в двух столбцах, он может просто что-то сделать примерно следующим образом:
void layout() {
double widthA = componentA.getPrefWidth();
double widthB = componentB.getPrefWidth();
double widthRequired = widthA + widthB;
double widthAvailable = ...;
double scaling = widthAvailable / widthRequired;
componentA.setWidth(scaling * widthA);
componentB.setWidth(scaling * widthB);
}
(Это, конечно, какой-то "псевдокод". Реальность гораздо сложнее)
Очевидно, что все эти вычисления сойдут с ума при обнаружении значений, которые вы предложили. Добавление чего-либо к Double.MAX_VALUE
приведет к переходу на POSITIVE_INFINITY
:
double w0 = Double.MAX_VALUE;
double w1 = 1000;
System.out.println(w0 + w1); // Prints Infinity
А бесконечность - "вирусная". Это испортит все дальнейшие вычисления:
double i0 = Double.POSITIVE_INFINITY;
double i1 = 1000;
System.out.println(i0 - i1); // Prints Infinity
В некоторых местах JavaFX существуют «магические ценности». Например, предпочтительные размеры null
или -1.0
приведут к тому, что предпочтительный размер будет вычислен на лету. Они могут также решили присвоить специальное значение MAX_VALUE
или POSITIVE_INFINITY
или сделать все вычисления макета независимыми от этих специальных значений ... каким-то образом. Но учитывая, насколько сложными могут быть вычисления компоновки, это, вероятно, было бы просто неудобством для реализации, если бы она вообще могла быть реализована разумно ...