значения layoutx / layouty - PullRequest
       2

значения layoutx / layouty

1 голос
/ 06 ноября 2011

У меня проблема с поиском правильных значений layoutx / layouty для фигур.Пожалуйста, посмотрите на этот пример:

package test;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Line;

public class TestLinePosition
    extends Application
{
  private Line line;

  private Scene getScene()
  {
    Group group = new Group();

    line = new Line(10, 10, 60, 10);

    group.getChildren().add(line);

    Scene scene = new Scene(group, 640, 480);

    return scene;
  }

  @Override
  public void start(Stage stage) throws Exception
  {
    stage.setScene(getScene());
    stage.show();
    System.out.println("x: " + line.getLayoutX() + ", y: " + line.getLayoutY());
  }

  public static void main(String[] args)
  {
    Application.launch(args);
  }
}

Если я запускаю эту программу, строка, кажется, позиционируется, как ожидается, начиная с 10, 10. Однако значения layoutx и layouty равны 0, 0.

Кто-нибудь может дать мне объяснение такого поведения и / или подсказать, как узнать реальную позицию?

Спасибо, Роджер

Ответы [ 2 ]

0 голосов
/ 31 января 2013

Ваша линия имеет координаты (10, 10) - (60, 10) в своих локальных координатах. LayoutX и LayoutY могут переводить эти координаты дальше внутри локальных координат группы.

  • Если вы хотите узнать границы расположения линий внутри группы, вы можете использовать line.getLayoutBounds().getMinX().
  • Если вы хотите узнать положение линии внутри сцены, вы также можете использовать метод line.localToScene(10, 10).
0 голосов
/ 08 ноября 2011

Не смешивайте начальные позиции для рисования с позициями макета. При добавлении узла в группу вы устанавливаете его расположение на оси X, вызывая setLayoutX(xValue). Поэтому вызов getLayoutX() возвращает ожидаемое значение.

Ваш пример (переработан):

package test;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class TestLinePosition extends Application {

    private Line line;        

    public static void main(String[] args) {
        Application.launch(args);
    }


    private Scene getScene() {
        Group group = new Group();

        //layout position is x:0 and y:0
        //painting starts at x:10 and y:10
        line = new Line(10, 10, 60, 10); 
        //x position for layout
        line.setLayoutX(100);
        //y position for layout
        line.setLayoutY(100);

        group.getChildren().add(line);

        Scene scene = new Scene(group, 640, 480);

        return scene;
    }

    @Override
    public void start(Stage stage) throws Exception {
        stage.setScene(getScene());
        stage.show();
        System.out.println("x: " + line.getLayoutX() + ", y: " + line.getLayoutY());
        System.out.println("start x: " + line.getStartX() + ", start y: " + line.getStartY());
    }
}
...