Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:与文本具有相同宽度和大小的按钮_Java_Layout_Javafx_Javafx 8 - Fatal编程技术网

JavaFX:与文本具有相同宽度和大小的按钮

JavaFX:与文本具有相同宽度和大小的按钮,java,layout,javafx,javafx-8,Java,Layout,Javafx,Javafx 8,按钮总是可以根据其内容自动调整其宽度(textProperty),但我需要更多 我有一组按钮;每个都有自己的文本。我需要所有按钮都具有相同的宽度,但同时,我希望相同的宽度尽可能小(这样所有按钮都没有多余的空格或省略号) 我认为这很容易,直到我意识到getWidth(),getlayoutBounds.getWidth()和getlayoutBoundsInParent().getWidth()不会返回计算的宽度 最初我直接绑定所有属性(prefWidthProprety()到widthPrope

按钮总是可以根据其内容自动调整其宽度(
textProperty
),但我需要更多

我有一组按钮;每个都有自己的文本。我需要所有按钮都具有相同的宽度,但同时,我希望相同的宽度尽可能小(这样所有按钮都没有多余的空格或省略号)

我认为这很容易,直到我意识到
getWidth()
getlayoutBounds.getWidth()
getlayoutBoundsInParent().getWidth()
不会返回计算的宽度

最初我直接绑定所有属性(
prefWidthProprety()
widthProperty()
等),但最终我返回到手动模式进行调查:

Button buttonA; // With original text "hello world"

buttonA.setText("Testing new String. This is very long so the width will be very big.");
buttonA.layout();
buttonA.requestLayout();

Platform.runLater(() ->
{
    System.out.println(buttonA.getWidth()); // Gives me old value
    System.out.println(buttonA.getlayoutBounds.getWidth()); // Gives me old value
    System.out.println(buttonA.getlayoutBoundsInParent().getWidth()); // Gives me old value
});

那么现在,我有什么选择呢?

要回答您关于布局的问题:

您可以在
按钮的父级上请求布局,如:

buttonA.setText("Testing new String. This is very long so the width will be very big.");
buttonA.getParent().layout();
buttonA.getParent().applyCss();
我已添加和删除了
requestLayout

如果需要,将样式应用于此节点及其子节点(如果有)。这 方法通常不需要直接调用,但可以使用 与Parent.layout()结合使用,在下一个 脉冲,或者如果场景不在舞台上


你试着把所有的按钮都放在VBOX上了吗?将VBOX width设置为使用_COMPUTED _SIZE,并将按钮宽度属性绑定到VBOX width属性没有人再读文档了吗?标准的Oracle正是以此为例。它说:“你可以麻烦地确定每个按钮的高度和宽度,然后将每个按钮的首选大小设置为集合中按钮的最大高度和宽度。更简单的选择是让布局窗格完成工作。”,然后继续向您展示如何在不计算大小的情况下准确地解决这个问题(或者,@Zoltanik,使用绑定)
applyCss()
不是关键部分,它调用父级的
layout()
来完成这项工作。对于未装饰的
按钮
s,您是对的,但是如果您在按钮上设置了一些CSS,它就变得“关键”:(虽然这不是使按钮一开始就具有相同宽度的方法)。只需让
VBox
(或您正在使用的任何布局窗格)为您完成工作即可。@jame\u D不幸的是,它们是作为行而不是列放置的。@Jai然后您将使用
GridPane