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);
}