【问题标题】:JavaFX: GridPane calculating incorrect column widthJavaFX:GridPane 计算不正确的列宽
【发布时间】:2015-11-12 20:49:10
【问题描述】:

我原以为 GridPane 会根据该列中所有元素的最大首选宽度来计算每列的默认宽度。但是,在我的代码中,它似乎计算的宽度太小,导致我在列中的一个标签被截断。

这是我的“cashflowform.fxml”:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.Box?>
<GridPane xmlns:fx="http://javafx.com/fxml" fx:controller="finfx.ui.CashFlowForm"
          style="-fx-padding:25;"
          vgap="5" hgap="5">
    <Label text="Datum"
           GridPane.columnIndex="0" GridPane.rowIndex="0">
    </Label>
    <DatePicker fx:id="datePicker" GridPane.columnIndex="1" GridPane.rowIndex="0"/>
    <Label text="Betrag"
           GridPane.columnIndex="0" GridPane.rowIndex="1">
    </Label>
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="1"/>
    <Label text="Kategorie"
           GridPane.columnIndex="0" GridPane.rowIndex="2">
    </Label>
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="2"/>
    <Label text="Anmerkung"
           GridPane.columnIndex="0" GridPane.rowIndex="3">
    </Label>
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="3"/>
    <Box GridPane.columnIndex="0" GridPane.rowIndex="4"
         GridPane.columnSpan="2"
         GridPane.hgrow="ALWAYS"
         height="20">
    </Box>
    <Button text="Speichern"
            GridPane.columnIndex="0" GridPane.rowIndex="5"
            GridPane.columnSpan="2"
            GridPane.hgrow="ALWAYS" maxWidth="Infinity">
    </Button>
    <Button text="Speichern &amp; Weitere Position..."
            GridPane.columnIndex="0" GridPane.rowIndex="6"
            GridPane.columnSpan="2"
            GridPane.hgrow="ALWAYS" maxWidth="Infinity">
    </Button>
    <Button text="Abbrechen"
            GridPane.columnIndex="0" GridPane.rowIndex="7"
            GridPane.columnSpan="2"
            GridPane.hgrow="ALWAYS" maxWidth="Infinity">
    </Button>
</GridPane>

这就是我设置舞台的方式(注意我没有设置任何尺寸,所以我让它自己计算尺寸):

    primaryStage.setScene(new Scene(FXMLLoader.loadFxmlRoot("cashflowform")));
    primaryStage.show();

结果:

如您所见,第一列太小,无法完全显示我的“Anmerkung”标签。为什么会这样?解决此问题的最佳方法是什么?

PS:作为一个附带问题,如果有人关心,我还注意到我添加为标签/字段和按钮之间的空格填充符的“框”实际上显示为一条白色的小垂直线,当您查看时密切。似乎 Box 不适合用于此目的。我刚开始使用 JavaFX,Swing 的“Box.createVerticalGlue()”的合适对应物是什么?

PPS:在有人问之前:我的代码中看到的“FXMLLoader”不是 javafx.fxml.FXMLLoader,而是一个自定义实用程序类

谢谢!

【问题讨论】:

    标签: javafx fxml gridpane


    【解决方案1】:

    我发现了。设置

    minWidth="-Infinity"
    

    因为标签修复了它,因为 -Infinity 实际上解析为 Region/Control.USE_PREF_SIZE。

    我不知道为什么需要这样做,因为根据 GridPane 的文档,使用首选大小应该是列大小调整的默认行为。对我来说,不得不这样做似乎是一种黑客行为。但无论如何,这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 2014-03-23
      • 2021-09-12
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多