JavaFX сохраняет местоположение перетаскиваемых узлов

Создавая приложение javaFX, которое получает местоположения, ширину и глубину прямоугольников из базы данных, чтобы нарисовать их, база данных содержит прямоугольники posX, posY, ширину и глубину в соответствии с фактической шириной и глубиной панели. Я смог нарисовать прямоугольники в соответствии с панель, которую я рисую локально, проблема в том, что я не знаю, как обновить базу данных новыми значениями при перетаскивании прямоугольника, так как я должен преобразовать их обратно в фактическую координацию, код:

// resourcePosX,resourcePosY,resourceDepth and resourceWidth are the actual
// rectangle dimensions from the database
//  actualDepth and actualWidth are the actual pane dimensions
// prefWidth and prefHight are the current pane dimensions that i am drawing on 
int posX = (resourcePosX*this.prefHight)/actualDepth;
int posY = (resourcePosY*this.prefWidth)/actualWidth;

int depth = (resourceDepth*this.prefHight)/actualDepth;
int wedth = (resourceWidth*this.prefWidth)/actualWidth;

Node resource= new Rectangle(posX, posY, depth, wedth);
EventHandler<MouseEvent> onMousePressedEventHandler = new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent t) {
                orgSceneX = t.getSceneX();
                orgSceneY = t.getSceneY();
                orgTranslateX = ((Node) (t.getSource())).getTranslateX();
                orgTranslateY = ((Node) (t.getSource())).getTranslateY();
            }
        };

        EventHandler<MouseEvent> onMouseDraggedEventHandler = new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent t) {
                double offsetX = t.getSceneX() - orgSceneX;
                double offsetY = t.getSceneY() - orgSceneY;
                double newTranslateX = orgTranslateX + offsetX;
                double newTranslateY = orgTranslateY + offsetY;

                ((Node) (t.getSource())).setTranslateX(newTranslateX);
                ((Node) (t.getSource())).setTranslateY(newTranslateY);
            }
        };

        resource.setOnMouseDragged(onMouseDraggedEventHandler);


        resource.setOnMousePressed(onMousePressedEventHandler);

Как преобразовать текущие прямоугольники x и y в фактические снова? для того, чтобы сохранить их в базе данных.


Будет ли проще или лучше использовать холст? пока я ничего не знаю о холсте

1 ответ

Решение

Вы могли бы создать setOnMouseReleased манипулятор и использовать fixPostion() метод, который вычисляет текущую позицию, используя текущую позицию плюс переведенную позицию.

EventHandler<MouseEvent> onMouseReleasedEventHandler = new EventHandler<MouseEvent>() {

  @Override
  public void handle(MouseEvent t) {

    fixPosition((Node) t.getSource());

  }
};

resource.setOnMouseReleased(onMouseReleasedEventHandler);

private void fixPosition( Node node) {

    double x = node.getTranslateX();
    double y = node.getTranslateY();

    node.relocate(node.getLayoutX() + x, node.getLayoutY() + y);

    node.setTranslateX(0);
    node.setTranslateY(0);

}
Другие вопросы по тегам