JavaFX分隔符不依赖于类的宽度

时间:2014-11-25 14:58:42

标签: properties javafx width separator

我想得到一个分隔符,它用母亲组件的大小改变他的大小。 在我的例子中,我有一个JavaFX Popup,在那里我添加了一个VBox。对于这个VBox,我添加了一个HBox。这款HBox有一个Label,一个Speparator和一个Button。 现在我想让按钮位于右端,标签位于HBox的左端。我想我必须在这些组件之间使用分隔符来获取空间。

我该如何处理......

我做了这样的事情,但它不起作用。

// Box for the Headline
    HBox headLine = new HBox();
    headLine.setPadding(new Insets(5, 5, 5, 5));

    // Label with the HeadLine Description in
    final Label heading = new Label(headLineText);
    heading.getStyleClass().addAll("popup-label-name");

    // Close Button
    close = new Button("X");
    close.setVisible(false);
    closeButtonHandler();

    // Creates an invisble Separator1
    Separator sep = new Separator(Orientation.HORIZONTAL);
    sep.setVisible(false);
    sep.widthProperty().add(m_container.widthProperty().get());

    close.getStyleClass().addAll("popup-button", "popup-button-color");

    // Adds to the Headline the Data
    headLine.getChildren().addAll(heading, sep, close);

变量m_container是VBox!我该怎么处理呢?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

最简单的方法(如果不使用像AnchorPane这样的不同容器)是插入一个不可见但可扩展的“空间”对象:

void testLabelSpace(HBox box) {        
    Text first = new Text("first");
    Text second = new Text("second");

    Node space = new HBox();      
    HBox.setHgrow(space, Priority.ALWAYS);

    box.getChildren().addAll(first, space, second);
}

答案 1 :(得分:0)

如果我正确理解了这个问题,你只需要在标签和按钮之间留出空白。告诉Label始终水平增长,并设置其最大宽度以允许它增长到任何大小:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class HBoxExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        HBox hbox = new HBox();
        Label label = new Label("Label");
        Button button = new Button("Button");
        HBox.setHgrow(label, Priority.ALWAYS);
        label.setMaxWidth(Double.MAX_VALUE);
        hbox.getChildren().addAll(label, button);

        primaryStage.setScene(new Scene(hbox, 350, 75));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}