JavaFX 1:модификаторы доступа связывания и var
-
05-09-2019 - |
Вопрос
var width = 400;
var height = 400;
Stage {
style: StageStyle.TRANSPARENT
onClose: function():Void {
System.exit(0);
}
scene: Scene {
content: Scribble {}
width: width
height: bind height
}
}
Почему ширина работает, а высота нет?И что я могу сделать, чтобы это исправить?Netbeans говорит:
высота имеет доступ только к скрипту (по умолчанию) в javafx.scene.Scene
Решение
Хорошо, я понял:
var width : Number = 400;
var height : Number = 400;
var stage:Stage = Stage {
width: bind width with inverse
height: bind width with inverse
scene: Scene {
content: Scribble {
canvasWidth: bind stage.scene.width
canvasHeight: bind stage.scene.height
}
}
}
Хотя на самом деле мне не нужно указывать здесь ширину и высоту, потому что я могу получить к ним доступ через переменную сцены.Ширина и высота сцены обновляются при изменении ширины и высоты сцены.Я обнаружил, что CanvasWidth будет обновляться намного лучше, если он привязан к ширине и высоте сцены, а не к ширине и высоте var (которые обновляются только после завершения изменения размера).
Другие советы
Если быть более точным, ширина и высота сцены объявлены как «public-init».Это означает, что их можно установить только во время инициализации.Привязка высоты в литерале объекта сцены подразумевает, что высота будет обновлена, отсюда и ошибка.Ширина и высота сцены объявлены как «общедоступные», что означает, что их можно обновлять.
Не следует ни к чему привязывать размеры сцены.Главным образом потому, что размеры сцены не будут обновляться, когда пользователь попытается изменить размер содержащего ее окна.