当前位置: 首页 > 知识库问答 >
问题:

JavaFX: GridPane计算不正确的列宽

慕容成文
2023-03-14

我本以为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();

结果:

正如你所看到的,第一列太小了,无法完全显示我的“安默空”标签。为什么会这样,解决这个问题的最好方法是什么?

PS:顺便问一下,如果有人关心的话,我还注意到我添加的作为标签/字段和按钮之间的空间填充的“框”实际上显示为一条白色的垂直线,当你仔细观察时。看起来用盒子来做这个并不合适。我刚从JavaFX开始,Swing的“Box.createVerticalGlue()”的合适对应物是什么?

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

非常感谢。

共有1个答案

寿伟
2023-03-14

我发现了。设置

minWidth="-Infinity"

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

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

 类似资料:
  • 我正在尝试匹配从服务器下载的文件的md5sum。只有当总和匹配时,处理才会继续。 上面的代码并没有每次为某些文件正确提供md5sum。 当我去控制台检查md5sum时 下载文件的vimdiff未提供任何差异。。下载后的文件是正确的。 我无法在上述代码中看到问题。 我正在尝试更改缓冲区大小。但没有运气,所以我猜这不是因为缓冲区大小等。 问候Dheeraj Joshi

  • 我需要阅读由AutoCAD导出为PDF的平面图,并使用PDFBox在上面放置一些带有文本的标记。除了文字宽度的计算之外,一切都很顺利,文字的宽度写在标记旁边。 我浏览了整个PDF规范,详细阅读了其中涉及图形和文本的部分,但没有任何效果。据我所知,字形坐标空间设置在用户坐标空间的1/1000处。因此,宽度需要放大1000倍,但仍然是实际宽度的一小部分。 这就是我为定位文本所做的: *0.043f可以

  • 预期成果:266.66 代码:

  • 公共静态无效字(字符串文本){int numWords=1; 字符串“是this_one_long_word还是几个???你觉得怎么样??太多“应该打印10个字和”!这使用periods.as.word.delimiters,可能很棘手。“应该打印10个单词。 描述如下:一个单词是由一个或多个字符组成的序列,由空格或句子终止符(句号、冒号、分号、问号、感叹号)分隔,无论它是否为实际的英语单词。空白

  • null 我相信这个答案是正确的,但我无法证明。有人能证明它为什么起作用或提供一个反例吗?

  • 问题内容: 我有: MySql输出:“列’price’的列说明符不正确 为什么是这样? 问题答案: 指定数据类型时无效。 您可以在括号忽略值,例如只是有本身或指定使用类似的括号内的数值(见本的信息,什么样的价值观是说......你可能需要这些取决于什么你打算定制存储在列中)