2016-03-12 3 views
0

Есть ли простой способ нарисовать какую-то фигуру, перемещая мышь?Формы рисования JavaFX с помощью мыши

Чтобы быть более конкретным, я делаю программу скриншотов, поэтому я хочу как-то выбрать область отображения. Я вижу, что он держит мышь в точке A и перемещает ее в точку B в реальном времени, рисуя прямоугольник между точкой A и текущей точкой.

Извините за плохой язык, английский не является родным.

+0

Ничего не создано: вам просто нужно реализовать это непосредственно с помощью обработчиков мыши. ('setOnMousePressed (...)', 'setOnMouseDragged (...)', 'setOnMouseReleased (...)'). –

ответ

0

В этом случае я использую объект сцены, называемый сценой. Это или что-то вроде этого, вероятно, должно делать то, что вы хотите, возможно, вам нужно переключиться между dragBox.setTranslate и dragBox.setWidth/.setHeight в тех случаях, когда вы перетаскиваете или левете, а не вниз и вправо.

Rectangle dragBox = new Rectangle(0, 0, 0, 0); 
dragBox.setVisible(false); 
scene.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() { 
    @Override 
    public void handle(MouseEvent mouseEvent) { 
     if(mouseEvent.getEventType() == MouseEvent.MOUSE_CLICKED){ 
      dragBox.setVisible(true); 
      dragBox.setTranslateX(mouseEvent.getX()); 
      dragBox.setTranslateY(mouseEvent.getY()); 
     } 
     if(mouseEvent.getEventType() == MouseEvent.MOUSE_MOVED && dragBox.isVisible()){ 
      dragBox.setWidth(mouseEvent.getX() - dragBox.getTranslateX()); 
      dragBox.setHeight(mouseEvent.getY() - dragBox.getTranslateY()); 
     } 
     if(mouseEvent.getEventType() == MouseEvent.MOUSE_RELEASED) 
      dragBox.setVisible(false); 
    } 
}); 

Вы также должны убедиться, чтобы добавить dragBox к панели, что в настоящее время показали на сцене, или иначе dragBox не будут видны.

+0

Он работает не так, как ожидалось: c Но я вижу логику, как вы это делаете. Спасибо за помощь :) – Nazomg

+0

Это хорошо, дайте мне знать, если вы обнаружите, какие ошибки я, возможно, сделал, я думаю, это лучше, если я улучшу ответ :) Я в конечном итоге сделаю это сам позже в любом случае, но у меня есть крайний срок в Java проект через пару часов, так что сначала сделайте это. – Chexxor