我使用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,...);
结果:
每个项目的宽度现在都相同,但文本对齐似乎现在居中。我尝试将对齐方式更改为LEFT
toggleButton.setContentDisplay(ContentDisplay.LEFT)
和toggleButton.setAlignment(Pos.CENTER_LEFT)
,但没有成功。还有其他方法可以解决这个问题吗?
更新
我尝试toggleButton.setTextAlignment(TextAlignment.LEFT);
与之前的结果相同。
答案 0 :(得分:2)
在Labeled
及其子类中有各种控制对齐的机制:
alignmentProperty()就是你想要的。根据文件,它:
指定Labeled中的文本和图形应该如何 当Labeled中有空的空格时对齐。
所以你需要
toggleButton.setAlignment(Pos.CENTER_LEFT);
指定文本为多行时文本行的行为 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