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

时间:2017-01-09 10:16:42

标签: java layout javafx javafx-8

按钮总是可以自动调整其宽度到其内容(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
});

现在,我有哪些选择?

1 个答案:

答案 0 :(得分:1)

回答关于布局的问题:

您可以在Button的父级上请求布局,例如:

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

我添加了applyCss并删除了requestLayout

  

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