使用JavaFX场景生成器/Gluon创建垂直按钮栏的简单方法

使用JavaFX场景生成器/Gluon创建垂直按钮栏的简单方法,javafx,javafx-8,scenebuilder,Javafx,Javafx 8,Scenebuilder,如何在JavaFX8中创建垂直按钮栏 我想要ButtonBar组件的概念完全相同,但是ButtonBar是水平的,我想要垂直的。所有按钮的大小必须相同 如果我使用VBox,我必须手动设置按钮和VBox的宽度 有没有一种不必设置宽度的更简单方法?您需要两件事:在VBox上将fillWidth设置为true,以及在每个按钮上设置maxWidth。最方便的方法可能是VBox的一个简单子类: import javafx.scene.control.Button; import javafx.scene.

如何在JavaFX8中创建垂直按钮栏

我想要ButtonBar组件的概念完全相同,但是ButtonBar是水平的,我想要垂直的。所有按钮的大小必须相同

如果我使用VBox,我必须手动设置按钮和VBox的宽度


有没有一种不必设置宽度的更简单方法?

您需要两件事:在
VBox
上将
fillWidth
设置为true,以及在每个按钮上设置
maxWidth
。最方便的方法可能是
VBox
的一个简单子类:

import javafx.scene.control.Button;
import javafx.scene.layout.VBox;

public class VerticalButtonBar extends VBox {

    public VerticalButtonBar() {
        setFillWidth(true);
    }

    public void addButton(Button button) {
        button.setMaxWidth(Double.MAX_VALUE);
        getChildren().add(button);
    }

}
然后你可以做像这样的事情

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class VerticalButtonBarExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        VerticalButtonBar bar = new VerticalButtonBar();
        bar.addButton(new Button("A"));
        bar.addButton(new Button("Button"));

        BorderPane root = new BorderPane();
        root.setLeft(bar);
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }



    public static void main(String[] args) {
        launch(args);
    }
}
看起来像


查看是否要使垂直按钮栏对SceneBuilder可见。

您需要两件事:在
VBox
上将
fillWidth
设置为true,以及在每个按钮上设置
maxWidth
。最方便的方法可能是
VBox
的一个简单子类:

import javafx.scene.control.Button;
import javafx.scene.layout.VBox;

public class VerticalButtonBar extends VBox {

    public VerticalButtonBar() {
        setFillWidth(true);
    }

    public void addButton(Button button) {
        button.setMaxWidth(Double.MAX_VALUE);
        getChildren().add(button);
    }

}
然后你可以做像这样的事情

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class VerticalButtonBarExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        VerticalButtonBar bar = new VerticalButtonBar();
        bar.addButton(new Button("A"));
        bar.addButton(new Button("Button"));

        BorderPane root = new BorderPane();
        root.setLeft(bar);
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }



    public static void main(String[] args) {
        launch(args);
    }
}
看起来像


查看是否要使垂直按钮栏对SceneBuilder可见。

据我所知,按钮栏无法更改此设置,因此SceneBuilder对此无能为力


您可能想为ButtonBar提交一个功能请求:

据我所知,ButtonBar无法更改此功能,因此SceneBuilder对此无能为力


您可能需要为ButtonBar提交功能请求:

Hm。。。回答很好,我希望ButtonBar能够处理这个问题,这是我在SceneBuilder做一些测试时的期望。但是考虑到这一点,它不适用于SceneBuilder,因为FXML会有效地调用
getChildren()。添加(按钮)
,而不是
addButton
。我正在寻找一种不用代码就能实现它的方法,只是使用场景生成器。我不喜欢我这样做,因为我必须处理宽度。最后你的方法一定是个好方法。嗯。。。回答很好,我希望ButtonBar能够处理这个问题,这是我在SceneBuilder做一些测试时的期望。但是考虑到这一点,它不适用于SceneBuilder,因为FXML会有效地调用
getChildren()。添加(按钮)
,而不是
addButton
。我正在寻找一种不用代码就能实现它的方法,只是使用场景生成器。我不喜欢我这样做,因为我必须处理宽度。最后,你的方法必须是一个好方法。