在setHgrow

时间:2015-07-27 16:02:23

标签: java javafx javafx-2 javafx-8

我使用JavaFX-8构建应用程序。我试图建立一个菜单。每个菜单项都是ToggleButton,所有ToggleButtons都应具有相同的宽度。所以我使用了以下代码剪切:

        VBox vbox = new VBox();
        ToggleButton toggleButton = new ToggleButton("MyText");
        HBox hBox = new HBox();
        hBox.getChildren().add(toggleButton);
        HBox.setHgrow(toggleButton, Priority.ALWAYS);
        toggleButton.setMaxWidth(Double.MAX_VALUE);
                            [...]
        vbox.getChildren().add(hBox,hbox2,hbox3,...);

结果:

snipped of the result of the shown code

每个项目的宽度现在都相同,但文本对齐似乎现在居中。我尝试将对齐方式更改为LEFT toggleButton.setContentDisplay(ContentDisplay.LEFT)toggleButton.setAlignment(Pos.CENTER_LEFT),但没有成功。还有其他方法可以解决这个问题吗?

更新 我尝试toggleButton.setTextAlignment(TextAlignment.LEFT);与之前的结果相同。

2 个答案:

答案 0 :(得分:2)

Labeled及其子类中有各种控制对齐的机制:

alignmentProperty()就是你想要的。根据文件,它:

  

指定Labeled中的文本和图形应该如何   当Labeled中有空的空格时对齐。

所以你需要

toggleButton.setAlignment(Pos.CENTER_LEFT);

textAlignmentProperty

  

指定文本为多行时文本行的行为   contentDisplayProperty()会影响图形和文本,这个   设置仅影响相对于文本的多行文本   界限。

换句话说,如果您有多行文本,您可以将整个文本视为占据一个矩形,其高度由所有线条限定,其宽度由最宽的线条限定。 textAlignment属性指定每行在该矩形内的对齐方式。这不适用于您的情况,因为您只有一行文字。

最后,有contentDisplayProperty()。这个

  

指定图形相对于文本的位置。

所以只有在按钮中同时显示文字和图形时才会有所不同。例如,将其设置为ContentDisplay.LEFT指定图形应放在文本的左侧。

答案 1 :(得分:0)

ToggleButton toggleButton = new ToggleButton("MyText");
HBox hBox = new HBox();
hBox.getChildren().add(toggleButton);
HBox.setHgrow(toggleButton, Priority.ALWAYS);
toggleButton.setMaxWidth(Double.MAX_VALUE);
toggleButton.setTextAlignment(TextAlignment.LEFT);//set text align

请参阅JavaDoc ToggleButton:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ToggleButton.html 和TextAlignment http://download.java.net/jdk9/jfxdocs/javafx/scene/text/TextAlignment.html#LEFT

选项II
使用JavaFX样式表

.toggle-button1{
    -fx-font: 30 arial; 
    -fx-text-alignment: left;   
}

在Java中

scene.getStylesheets().add("myStyle.css");//load css
toggleButton.getStyleClass().add("toggle-button1");// assign style