2017-10-04 79 views
-1

我試圖調整一些窗格的大小,如果一個元素有LayoutX < 0. 我已經創建了一個存儲偏移量來調整大小的DoubeProperty。節點沒有調整大小

監聽器是這樣的:

offset.addListener((observable, oldValue, newValue) -> { 
    if(newValue.doubleValue() > 0) { 
     setPrefWidth(getWidth() + newValue.doubleValue());  
    } 
}); 

但TE節點沒有; T改變他的財產。當我點擊元素時,我看到偏移量比0更多。我如何強制調整大小?

我也想用綁定:

prefWidthProperty().bind(Bindings.when(Bindings.isNotEmpty(children)) 
      .then(Bindings.when(offset.greaterThan(0)) 
        .then(widthProperty().add(offset)) 
        .otherwise(widthProperty())) 
      .otherwise(MINIMAL_RELATION_WIDTH) 
      ); 

但相同的結果。奇怪的是,如果我添加一個事件懸停到其他元素(例如陰影),改變BoundsInLocalProperty ..我看到,調整大小執行afet懸停在元素上。我不明白爲什麼

回答

0

我準解決我的問題......

我有4個窗格擴展BorderPane:

  • ChildPane
  • RelationExPane
  • SinglePane
  • RelationCurentPane

ChildPane包含3個其他人。而RelationExPane,SinglePane,RelationCurrentsPane在Hbox中包含一些ChildPanes。

在RelationExPane和SinglePane中,我擁有2個元素,第一個LayoutX依賴於其他的LayoutX。有時候應該是LayoutX將爲< 0.在這種情況下,我實現了將調整Node大小的偵聽器或LayoutX,但它沒有按照我在帖子中提到的那樣工作。結果是這樣的:

enter image description here

這是國家剛剛生成樹之後。在(+)元素上,我添加了只添加陰影的onEnter事件。當我在那裏移動鼠標時,元素被正確放置。我不明白爲什麼(我知道這下進行更改在此元素的父約束,但通常它不應該影響其他窗格。

我被Ovveride computePrefWith功能我的問題的一種解決方法

對於關係EX:

@Override 
protected double computeMinWidth(double height) { 
    Double offset = 0.0; 
    if(spouseCard.getLayoutX() < 0) { 
     offset = (spouseCard.getLayoutX()*(-1)) +20; 
    } 

    return super.computeMinWidth(height)+ offset; 
} 

而對於關係當前

@Override 
    protected double computePrefWidth(double height) { 
     Double offset = 0.0; 
     Double maxRelationWidth = spouseCard.getLayoutX() + spouseCard.getWidth(); 
     if(maxRelationWidth > relation.getWidth()) { 
      offset = maxRelationWidth+10; 
     } 
     return super.computePrefWidth(height)+offset; 
    } 

現在第一落點我好的。但是當我移動(+)元素時,我仍然有問題。在這種情況下,每個moveOn或moveOut將節點的大小調整爲不同大小。