如何指定您希望工具栏中的元素居中?

时间:2015-02-07 15:19:48

标签: java layout javafx javafx-8

出于某种原因,JavaFX的ToolBar仅为项目对齐提出了两个选项:LEFT_TO_RIGHTRIGHT_TO_LEFT

有趣的是,如果这是RIGHT_TO_LEFT,你必须在逆序中指定你的项目,以便它们自然显现......

但是,我没有看到在中心中对齐元素的任何选项。你是如何实现这一目标的?或者我必须使用除工具栏以外的其他东西吗?


编辑:这是当前的代码......不幸的是,这不起作用:(

FXML:

<BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="com.github.fge.grappa.debugger.csvtrace.tabs.linechart.LineChartTabDisplay">
    <top>
        <ToolBar fx:id="toolbar">
            <HBox fx:id="hbox" alignment="CENTER">
                <Region fx:id="leftSpacer"/>
                <Button text="Refresh"/>
                <ProgressBar visible="false"/>
                <Label text="Layout testing"/>
                <Region fx:id="rightSpacer"/>
            </HBox>
        </ToolBar>
    </top>
</BorderPane>

班级:

public class LineChartTabDisplay
    extends JavafxDisplay<LineChartTabPresenter>
{

    public Region leftSpacer;
    public Region rightSpacer;
    public ToolBar toolbar;
    public HBox hbox;

    @Override
    public void init()
    {
        HBox.setHgrow(leftSpacer, Priority.SOMETIMES);
        leftSpacer.setMinWidth(Region.USE_PREF_SIZE);
        HBox.setHgrow(rightSpacer, Priority.SOMETIMES);
        rightSpacer.setMinWidth(Region.USE_PREF_SIZE);
    }
}

但这就是它所给出的:

enter image description here

3 个答案:

答案 0 :(得分:1)

找到。

事实上,代码非常简单&#34;。有点,因为这真的 应该在ToolBar为首发,但是这里......

FXML现在如下:

<BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="com.github.fge.grappa.debugger.csvtrace.tabs.linechart.LineChartTabDisplay">
    <top>
        <ToolBar fx:id="toolbar">
            <HBox fx:id="hbox" alignment="CENTER" spacing="5.0">
                <Button text="Refresh"/>
                <Label text="Layout testing"/>
            </HBox>
        </ToolBar>
    </top>
</BorderPane>

代码很简单:

public class LineChartTabDisplay
    extends JavafxDisplay<LineChartTabPresenter>
{
    @FXML
    protected ToolBar toolbar;

    @FXML
    protected HBox hbox;

    @Override
    public void init()
    {
        hbox.minWidthProperty().bind(toolbar.widthProperty());
    }
}

答案 1 :(得分:0)

有一个小小的黑客可以产生一个动态的间隔:

final Region spacer = new Region();
HBox.setHgrow(spacer, Priority.SOMETIMES);
spacer.setMinWidth(Region.USE_PREF_SIZE);

如果您将{1}作为第一项而另一项作为最后一项放在ToolBar中,则您的项目应居中。

答案 2 :(得分:0)

只需注意工具栏的宽度,然后将新值应用于HBox。为了监视舞台的大小,这是必需的

toolbar.widthProperty().addListener((obs, oldVal, newVal) -> {  
    hbox.setPrefWidth(newVal.doubleValue());
});