2017-10-20 77 views
0

鑑於以下佈局:JavaFX的:布圖中的節點的行

enter image description here

在一些情況下字段2(和上面的相應Label)是不可見的和字段3字段4應相應地向左移動。

我的第一個嘗試是將元素放置在Pane(因爲我也是這個例子中的屏幕截圖),並重新計算所有元素的確切位置,如果一個元素被設置爲不可見的話。此解決方案正在運行,但如果元素,其大小或順序發生更改,則需要大量維護。

在討論另一個問題的過程中,我得到了使用HBox來放置字段的想法,這會給我自動間隔。

但使用HBox不會做的伎倆,因爲:

  1. 至於我在HBox看到標籤不能元素以上進行設置。
  2. 如果我設置一個元素不可見,其他元素不會左移。

任何想法如何將我想要的行爲存檔?

回答

2

將每個LabelComboBox/Label代入VBox。然後根據您的要求將它們從HBox中添加/刪除。另一種解決方案是將所有內容都放入GridPane並添加/刪除列。

+2

如果你喜歡使用'調用setVisible()'代替添加和去除'VBox',只是結合'VBox'」 s'managedProperty()'到它的'visibleProperty()'。 –

2

使Node隱形不會將其從版面中刪除。刪除從父佈局的節點由

  1. 從父
  2. 節點的managed屬性設置爲false的孩子列表中移除一個Node完成。

實施例示出/使用managed屬性隱藏節點:

public static void toggleVisibility(Node node) { 
    boolean newValue = !node.isVisible(); 
    node.setVisible(newValue); 

    // invisible nodes should not be taken into account for HBox layout 
    node.setManaged(newValue); 
} 

@Override 
public void start(Stage primaryStage) { 
    Rectangle rect1 = new Rectangle(100, 100, Color.RED.deriveColor(0, 1, 1, 0.5)); 
    Rectangle rect2 = new Rectangle(100, 100, Color.GREEN.deriveColor(0, 1, 1, 0.5)); 
    Rectangle rect3 = new Rectangle(100, 100, Color.BLUE.deriveColor(0, 1, 1, 0.5)); 
    HBox hbox = new HBox(rect1, rect2, rect3); 

    Scene scene = new Scene(hbox); 
    scene.setOnMouseClicked(evt -> { 
     toggleVisibility(rect2); 
    }); 

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