JavaFX/FXML:整个窗口旁边的垂直按钮

JavaFX/FXML:整个窗口旁边的垂直按钮,javafx,fxml,Javafx,Fxml,我使用网格窗格作为舞台的主场景,布局完全在FXML文件中定义。我希望在窗口的整个侧面都有一个按钮,如下所示: 但是我就是不能让它工作。更准确地说,这个按钮似乎无法覆盖整个高度。我已经为按钮设置了GridPane.vgrow=ALWAYS,maxHeight=“Infinity”,以及GridPane.fillHeight=true,但按钮仍然与其中的文本一样长,并且位于侧面的中心 如何使按钮在整个网格窗格中伸展?正如前面提到的,当然我已经正确设置了GridPane.rowSpan。并不是按钮没

我使用网格窗格作为舞台的主场景,布局完全在FXML文件中定义。我希望在窗口的整个侧面都有一个按钮,如下所示:

但是我就是不能让它工作。更准确地说,这个按钮似乎无法覆盖整个高度。我已经为按钮设置了
GridPane.vgrow=ALWAYS
maxHeight=“Infinity”
,以及
GridPane.fillHeight=true
,但按钮仍然与其中的文本一样长,并且位于侧面的中心

如何使按钮在整个网格窗格中伸展?正如前面提到的,当然我已经正确设置了
GridPane.rowSpan
。并不是按钮没有正确地放置在网格窗格中,只是它不会在整个可用的垂直空间中伸展

请注意,我更喜欢通过FXML的解决方案,而不是Java代码,因为我不希望在我的类中有这样的布局代码


谢谢大家!

这是个好问题,伙计。很难确定如何执行此操作,但此处是scene builder执行此操作的结果和FXML文件:


以下是我所做的: 我将Gridepane作为其他控制器的父级,例如它包含2列和3行,然后我将锚定窗格和索引(0,0)放置在其他行中,并使列跨度保持不变,并将其他组件按需要放置在其他行中,然后我将锚定窗格中的but按钮设置为所有角点的锚定窗格约束值为0(您可以在按钮的布局部分下找到锚定窗格约束)之后,我删除按钮的文本并将带有文本的标签放入按钮中,最后我将标签旋转了90度(您可以在标签的布局处的变换下找到旋转属性),然后您得到了您想要的


我希望我能回答你的问题!

这是一个很好的提问人。很难想办法解决这个问题,但这里是scene builder完成此任务的结果和FXML文件:


以下是我所做的: 我将Gridepane作为其他控制器的父级,例如它包含2列和3行,然后我将锚定窗格和索引(0,0)放置在其他行中,并使列跨度保持不变,并将其他组件按需要放置在其他行中,然后我将锚定窗格中的but按钮设置为所有角点的锚定窗格约束值为0(您可以在按钮的布局部分下找到锚定窗格约束)之后,我删除按钮的文本并将带有文本的标签放入按钮中,最后我将标签旋转了90度(您可以在标签的布局处的变换下找到旋转属性),然后您得到了您想要的


希望我能回答您的问题!

选择垂直按钮

SceneViewer
中,转到布局下拉列表

1.设置minHeight、minWidth、prefWidth、prefHeight、MaxWidth

            to 
   **USE_COMPUTED_SIZE**
maxHeight

            to
      **MAX_VALUE**
2.
按钮
必须跨越GridPane的所有行

.root {
    -fx-background-color: grey;
    -fx-hgap: 5;
    -fx-vgap: 5;
    -fx-padding: 5;
}

.root > .button > .text {
    -fx-rotate: 90;
}

.button {
    -fx-pref-height: Infinity;
    -fx-pref-width: 75;
}
3.
按钮
必须旋转90度

这里还要注意一些重要的事情。当您在SceneViewer中调整列或行的大小时,您设置的大小将是最大大小

这可能会增加问题,因为如果窗口变大,GridPane将不会相应地运行

因此,选择所有列和行,并确保最大大小设置为


如果希望它们增长,请使用\u COMPUTED\u SIZE。我添加了这个建议。

选择垂直按钮

SceneViewer
中,转到布局下拉列表

1.设置minHeight、minWidth、prefWidth、prefHeight、MaxWidth

            to 
   **USE_COMPUTED_SIZE**
maxHeight

            to
      **MAX_VALUE**
2.
按钮
必须跨越GridPane的所有行

.root {
    -fx-background-color: grey;
    -fx-hgap: 5;
    -fx-vgap: 5;
    -fx-padding: 5;
}

.root > .button > .text {
    -fx-rotate: 90;
}

.button {
    -fx-pref-height: Infinity;
    -fx-pref-width: 75;
}
3.
按钮
必须旋转90度

这里还要注意一些重要的事情。当您在SceneViewer中调整列或行的大小时,您设置的大小将是最大大小

这可能会增加问题,因为如果窗口变大,GridPane将不会相应地运行

因此,选择所有列和行,并确保最大大小设置为


如果希望它们增长,请使用\u COMPUTED\u SIZE。我添加了这个建议。

最简单的方法是使用css。按照以下步骤操作:

要旋转按钮中使用的标签,请使用:

.button > .text {
    -fx-rotate: 90;
}
要扩展按钮以使用整个高度,请使用无穷大作为首选高度:

.button {
    -fx-pref-height: Infinity;
    -fx-pref-width: 75;
}
MCVE

下面是一个示例,演示如何使用上述代码:

FXML

主要

输出


最简单的方法是使用css。遵循以下步骤:

要旋转按钮中使用的标签,请使用:

.button > .text {
    -fx-rotate: 90;
}
要扩展按钮以使用整个高度,请使用无穷大作为首选高度:

.button {
    -fx-pref-height: Infinity;
    -fx-pref-width: 75;
}
MCVE

下面是一个示例,演示如何使用上述代码:

FXML

主要

输出


阿里,谢谢你的努力。但这看起来相当黑客化,代码对我来说没有多大意义。必须有一个更简单、更干净的解决方案来解决这个问题。它是如何被黑客化的?我做的每件事都像你想要的,并且它可以按你想要的大小调整!!!!我想了解如何设置它,而不是使用gene