【问题标题】:JavaFX GridPane: Shrink if content is disabled and invisibleJavaFX GridPane:如果内容被禁用且不可见,则缩小
【发布时间】:2017-03-15 06:47:46
【问题描述】:

如果 GridPane 行的内容被禁用且不可见,是否可以缩小该行?

当我将节点设置为 disable=true 和 visible=false 时,单元格仍然占用空间。

如果我有 8 行并且只有第一行和最后一行可见,我不希望空行占用太多空间。好像只有两行。

我能找到的唯一“解决方案”是将大小设置为零。但是,我认为这不是一个好的解决方案。当/如果节点再次启用/可见时,我将不得不存储最小/最大大小以将其设置回来。 也许 CSS 可以提供更好的解决方案?

package com.company;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class App extends Application {

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

    /* (non-Javadoc)
     * @see javafx.application.Application#start(javafx.stage.Stage)
     */
    @Override
    public void start(Stage stage) throws Exception {
        Label label1 = new Label("Text");
        Label label2 = new Label("Text");
        Label label3 = new Label("Text");

        label2.setDisable(true);
        label2.setVisible(false);

        GridPane root = new GridPane();
        root.setGridLinesVisible(true);
        root.add(label1, 0, 0);
        GridPane.setVgrow(label1, Priority.NEVER);
        root.add(label2, 0, 1);
        GridPane.setVgrow(label2, Priority.NEVER);
        root.add(label3, 0, 2);
        GridPane.setVgrow(label3, Priority.NEVER);

        stage.setScene(new Scene(root));
        stage.setWidth(300);
        stage.setHeight(300);
        stage.setTitle("JavaFX 8 app");
        stage.show();
    }
}

【问题讨论】:

    标签: css javafx javafx-8


    【解决方案1】:

    如果不想让父节点布局节点,可以将节点的managed属性设置为false

    这是我在您的代码中使用以下行时显示布局差异的图像:

    label2.setManaged(false);
    

    【讨论】:

      猜你喜欢
      • 2014-05-09
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2015-10-19
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多