我有窗格和标签就可以了。 如何设置layoutXProperty的标签这样它会在X线上居中? 我想我应该使用这样的公式:(Pane.width-Label.width)/ 2
但我不知道它是如何编写的。我还没有找到在谷歌的答案。JavaFx;标签中心取决于宽度
有人可以暗示我吗? thxs。
Upd。如果声明后我更新标签的文本,它的文本可以是不同的长度。所以我想设置layoutXProperty它取决于文本的长度,并将在中心。
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)。正如你所看到的,我已经将它绑定到了中心,就像另一个标签一样。但是这个标签在标签变化文本的第一次迭代后改变了标注,并且开始看起来像that screen (label in border) ,我正试图解决它的确切问题。绑定工程,但不像我期待的那样
为什么您要手动设置'layoutX',而不是使用[布局窗格](http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102)并配置它以标签为中心? –
其实我不知道。我已经为教育目的创建了这个程序,现在它最后被删除了。但是,如果我会改变实现方式,无论如何,我想知道它是如何做到这一点 –
你根本不应该这样描述你的方式。您应该使用预定义的布局窗格,或者(高级)您应该创建自己的Pane子类并覆盖各种布局方法(特别是'layoutChildren()')。几乎可以肯定的是一个合适的布局窗格可以实现您想要的功能。 –