javafx查找子节点_JavaFX技巧29:使布局忽略不可见的节点
javafx查找子節點
在我仍在Swing中實現UI的時候,我曾經是MigLayout的忠實擁護者(“一個布局管理者來統治所有這些,對嗎Mikael?”)。 我真正喜歡的功能之一是當組件不可見時可以定義不同的行為。 MigLayout允許我保留現在不可見的組件所占用的空間,或使其仍可用于可見的組件。 那么如何在JavaFX中做到這一點呢?
即使答案很簡單,但通過查看API并不清楚。 JavaFX使用布局窗格(例如VBox,HBox,BorderPane,FlowPane或GridPane)來布置受管子節點。 此處的關鍵字為“托管”。 布局窗格僅考慮其布局算法中標記為托管的節點(默認為true)。 計算窗格的首選,最小,最大寬度的代碼也是如此。 此代碼也僅考慮受管節點。
讓我們來看一個例子。 我們創建一個帶有四個標簽的HBox。 最初看起來像這樣。
現在,我們將標簽2的可見性設置為false,并收到此布局。
為了重用以前由標簽占用的空間,我們現在將標簽2的“ managed”屬性設置為false。 如您所見,剩下的三個標簽現在填充了HBox的整個寬度,并且HBox的寬度已正確調整。
今天就這樣。 愿代碼與您同在!
PS:演示代碼如下:
package uk.co.senapt.desktop;import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage;/*** A little demo showing how the "visible" and "managed" property can be used* to make a node disappear in such a way that the layout pane / container can* reclaim the space previously occupied by the now invisible node.*/ public class VisibleManagedDemo extends Application {@Overridepublic void start(Stage primaryStage) {Label label1 = createLabel("Label 1");Label label2 = createLabel("Label 2");Label label3 = createLabel("Label 3");Label label4 = createLabel("Label 4");CheckBox visibleBox = new CheckBox("Visible");CheckBox managedBox = new CheckBox("Managed");visibleBox.setSelected(true);managedBox.setSelected(true);label2.visibleProperty().bind(visibleBox.selectedProperty());label2.managedProperty().bind(managedBox.selectedProperty());HBox hBox1 = new HBox(10, new Label("Label 2 settings:"), visibleBox, managedBox);HBox hBox2 = new HBox(10, label1, label2, label3, label4);hBox2.setStyle("-fx-background-color: lightgray; -fx-padding: 20");VBox vBox = new VBox(20, hBox1, hBox2);vBox.setFillWidth(false);vBox.setPadding(new Insets(20));primaryStage.setTitle("Visible / Managed Demo");primaryStage.setScene(new Scene(vBox));primaryStage.sizeToScene();primaryStage.centerOnScreen();primaryStage.show();}private Label createLabel(String text) {Label label = new Label(text);label.setStyle("-fx-background-color: orange; -fx-background-radius: 4; -fx-padding: 20;");label.setPrefSize(200, 200);return label;}public static void main(String[] args) {launch();} }翻譯自: https://www.javacodegeeks.com/2018/06/javafx-layouts-ignore-invisible-nodes.html
javafx查找子節點
總結
以上是生活随笔為你收集整理的javafx查找子节点_JavaFX技巧29:使布局忽略不可见的节点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二级域名如何绑定(二级域名如何绑定网站)
- 下一篇: 怎么看服务器是否支持php(怎么看服务器