2015-03-03 9 views
8

Bir düğümü taşımak için çeviri ne zaman kullanılır? Günün sonunda aynı şeyi yapıyorlar (görsel olarak); düğümü taşıyın; Birincisi orijin üzerinde bir çeviri yaparak (x, y aynı kalır), ikincisi x, y coords değiştirerek. Yani, bir düğümü ekranda belirli bir noktaya taşımak istiyorum .. node.relocate (x, y) veya node.setTranslateX (x), node.setTranslateY (y) kullanmalı mıyım?Çeviri kullanıldığında ve yeniden konumlandırıldığında - Çeviri ve düzen koordinatları arasındaki fark nedir?

Ne demek istediğimi göstermek için aşağıdakilerle oynayabileceğiniz bir örnek program hazırladım: Ekranda bir dikdörtgen var, konumu 4 kaydırıcıyla belirleniyor (2 tanesi düzeni x kontrol ediyor, öteki ikisi çeviriyi denetliyor x, y).

/* imports are missing */ 
public class TransReloc extends Application{ 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Group root = new Group(); 
     Rectangle rect = new Rectangle(100, 50, Color.BLUE); 
     root.getChildren().add(rect); 
     VBox controlGroup = new VBox(); 
     Slider relocX = new Slider(-100, 100, 0); 
     Slider relocY = new Slider(-100, 100, 0); 
     Slider transX = new Slider(-100, 100, 0); 
     Slider transY = new Slider(-100, 100, 0); 
     rect.layoutXProperty().bind(relocX.valueProperty()); 
     rect.layoutYProperty().bind(relocY.valueProperty()); 
     rect.translateXProperty().bind(transX.valueProperty()); 
     rect.translateYProperty().bind(transY.valueProperty()); 
     controlGroup.getChildren().addAll(relocX, relocY, transX, transY); 
     root.getChildren().add(controlGroup); 
     controlGroup.relocate(0, 300); 
     Scene scene = new Scene(root, 300, 400, Color.ALICEBLUE); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

cevap

8

layout koordinatları çocuklarının yerini kontrol etmek StackPane veya Vbox gibi Düzen Yöneticileri tarafından kullanılmaktadır. Grup (ve Pane), çocuk düzenini geliştiriciye bırakır, böylece translate işlevselliğinden hiçbir fark yoktur.

Yani genel olarak sadece ince konum ayarı için translate koordinatları değiştirmelidir ve Örnek olarak

(aslında/Pane düzeni yöneticileri olmayan Grup içindeki düğümler için Layoutx, layoutY değiştiremezsiniz) düzen yöneticilerine layout terk deneyin Sonraki kodu çalıştırmak ve StackPane'ın layoutBounds

public void start(Stage primaryStage) throws Exception { 
    StackPane root = new StackPane(); 
    Rectangle rect = new Rectangle(100, 50, Color.BLUE); 
    root.getChildren().add(rect); 
    Scene scene = new Scene(root, 300, 300, Color.ALICEBLUE); 

    rect.layoutXProperty().addListener((e) -> { 
     System.out.println(rect.getLayoutX() + ":" + rect.getLayoutY()); 
      }); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 

} 
nasıl yeniden hesaplandığını görmek için yeniden boyutlandırma