2016-11-24 2 views
0

Как получить координаты рисованного прямоугольника в панели?Получить координаты прямоугольника, нарисованные в панели

Это как я рисую прямоугольник:

Rectangle r = new Rectangle(); 
r.setX(50); 
r.setY(50); 
r.setWidth(200); 
r.setHeight(100); 
r.setStroke(Color.BLUE); 
r.setStrokeWidth(1); 
r.setFill(Color.TRANSPARENT); 
DragResizeMod.makeResizable(r); 
pane.getChildren().add(r); 

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

https://github.com/varren/JavaFX-Resizable-Draggable-Node/blob/master/src/sample/DragResizeMod.java

Так как я могу получить координаты рисованный прямоугольник? Без передачи координат в список перед его рисованием.

Спасибо

+0

Не могли бы вы описать более подробный, что вы «Пытаетесь добиться? [1] Вы хотите, чтобы координаты произвольного прямоугольника __обходили draw__? [2] Вы хотите, чтобы координаты прямоугольника __ до того, как он будет нарисован?? – SSchuette

+0

Я нарисую прямоугольник, используя мышь, нажмите и перетащите. и я также использую этот код https://github.com/varren/JavaFX-Resizable-Draggable-Node/blob/master/src/sample/DragResizeMod.java , чтобы изменить размер прямоугольника. поэтому, если я изменяю размер прямоугольника, он меняет свои координаты. поэтому мне действительно нужно получить свои координаты после изменения размера –

ответ

1

Есть несколько возможных решений, но легко можно было бы добавить обработчик к xPropertyxProperty @ Rectangle JavaDoc и аналогичного yProperty, как это:

rectangle.xProperty().addListener((Observable, oldValue, newValue) -> { 
    System.out.println("X position changed from <" + oldValue + "> to <" + newValue + ">"); 
}); 

Для полноты следует также добавить обработчик к widthProperty (и аналогичный heightProperty). Поскольку JavaDoc ссылается на xProperty:

Определяет координату X в верхнем левом углу прямоугольника.

Это означает, что если вы, например, измените размер, но верхний левый угол все еще находится в том же положении, вы не получите уведомление для xProperty!

+0

, где я могу добавить код? Я добавляю его в «initialize», но ничего не происходит. –

+0

Вы можете добавить его, когда вы создаете прямоугольник. Например. прямо за 'Rectangle r = new Rectangle();' Установите контрольную точку в 'System.out.prinln()' в обработчике из моего кода и проверьте, вызвана ли она. – SSchuette

+0

thats то, что я сделал. но он не вызывает код. Я изменяю rectangle.xProperty на r.xProperty, потому что r - мое имя переменной –

0

Если вам просто нужны координаты после изменения размера: используйте свойство boundsInParent. Если вы не применяете преобразования с компонентом сдвига/поворота, это даст вам границы Rectangle. Если вы используете Parent, который регулирует положение это дети, положение не может быть правильным, но Pane не один из них (но многие из его подклассы):

Rectangle r = ... 
... 
// resize 

Bounds boundsAfterResize = r.getBoundsInParent(); 
+0

как я могу использовать этот код? после изменения размера прямоугольника я получаю «0» –

+0

@pdftoimage a) вы не можете получить 0, так как 'Bounds' не является примитивным и b) Если определенное свойство этих границ равно' 0', это потому, что вы изменили 'Rectangle' be изменена/изменена/преобразована таким образом, что это свойство «0». Если это не желаемое значение для этого свойства, вам нужно найти ошибку в *** вашем коде *** (вы ничего не показываете изменения размера в своем вопросе BTW). – fabian

Смежные вопросы