簡體   English   中英

您如何指定要使工具欄中的元素居中?

[英]How do you specify that you want your elements in a ToolBar to be centered?

出於某種原因,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);
    }
}

但這就是它的作用:

在此處輸入圖片說明

找到。

實際上,代碼非常“簡單”。 有點,因為對於初學者來說,這確實應該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());
    }
}

好了,這個小技巧可以產生動態間隔:

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

如果將一個作為第一項,將另一個作為最后一項放在ToolBar上,則中間的項應居中。

只需注意工具欄的寬度,然后將新值應用於HBox。 為了監視舞台的大小,這是必需的

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM