了JavaFx;标签中心取决于宽度

时间:2017-09-25 14:26:36

标签: javafx label

我有 Pane Label 。 如何设置 Label layoutXProperty 以便它在X行的Center中? 我想我应该使用这样的公式:(Pane.width-Label.width)/ 2
但我不知道它是如何正确写的。我还没有在谷歌找到答案。

有人可以暗示我吗? thxs。

UPD。如果声明我更新标签的文本,它的文本可以是不同的长度。所以我想将 layoutXProperty 设置为取决于文本的长度,并且将在CENTER上。

UPD:已插入代码

public void start(Stage myStage) throws FileNotFoundException {

        myStage.setTitle("OrthographyChecker");

        Pane pane = new Pane();
        Scene scene = new Scene(pane, 700, 300);


        Label labelUp = new Label();
        labelUp.setFont(new Font(fontSize));
        labelUp.layoutXProperty().bind(pane.widthProperty().subtract(labelUp.widthProperty()).divide(2));
        labelUp.layoutYProperty().bind(pane.heightProperty().subtract(labelUp.heightProperty()).divide(5));
        labelUp.setText("Click to start");
        pane.getChildren().addAll(labelUp);

        TextField inputTxt = new TextField("");
        inputTxt.setVisible(false);
        inputTxt.layoutXProperty().bind(pane.widthProperty().subtract(inputTxt.widthProperty()).divide(2));
        inputTxt.layoutYProperty().bind(labelUp.layoutYProperty().add(35));
        pane.getChildren().addAll(inputTxt);

        Label chkL = new Label("");
        chkL.setFont(new Font(fontSize));
        chkL.layoutYProperty().bind(inputTxt.layoutYProperty().add(30));
        chkL.layoutXProperty().bind(pane.widthProperty().subtract(chkL.widthProperty()).divide(2));
        chkL.setStyle("-fx-border-color: blue;");
        pane.getChildren().addAll(chkL);

        inputTxt.setOnKeyPressed(event -> {
            if (event.getCode().equals(KeyCode.ENTER)) {
                try {
                    for (String OneWrd : chkWrd[0].replace(", ", ",").split(",")) {
                        if (inputTxt.getText().equalsIgnoreCase(OneWrd)) {
                            chkL.setText("You are right!");
                            chkL.setVisible(true);
                            notfound[0] = false;
                            break;
                        }
                    }
                    if (notfound[0]){
                        chkL.setText("Wrong! Right answer: \"" + chkWrd[0] + "\"");
                        chkL.setVisible(true);
                    }
                } catch (Exception e) {
                    errPrint(e, "Установки ожидания ");
                }
                inputTxt.setText("");
                pause[0] = false;
                notfound[0] = true;
                chkL.layoutXProperty().bind(pane.widthProperty().subtract(labelUp.widthProperty()).divide(2));
            }
        });


        myStage.setScene(scene);
        myStage.show();
    }

代码的一部分,使用它的标签麻烦(变量 chkL )。正如你所看到的,我把它绑定到中心,就像另一个标签一样。但是这个标签在标签更改文本的第一次迭代后改变了alingment,并开始看起来像that screen (label in border) 而我正试图解决它的问题。绑定有效,但不像我期待的那样

1 个答案:

答案 0 :(得分:1)

标记中心的正确方法是使用布局窗格并配置窗格和/或标签,使其居中。例如,如果您希望标签水平居中位于布局顶部(或布局的某个区域),则可以使用{ aps = { alert = { title = "e-mission-phone"; }; "content-available" = 1; }; notId = 1506359243823816; payload = { notId = 1506359243823816; }; } ,如下所示:

BorderPane

如果您选择使用,可以使用Scene Builder进行此处的所有设置。