나는 팬 및 라벨입니다. layoutXProperty레이블으로 설정하여 X 선의 중심에 위치 시키시겠습니까? 나는 다음과 같은 수식을 사용해야한다고 생각한다. (Pane.width-Label.width)/2
하지만 어떻게 쓰는지 모르겠다. 그리고 나는 Google에서 대답을 찾지 못했습니다.JavaFx; 라벨 센터는 너비에 따라 다릅니다
어떤 사람이 나에게 힌트를 줄 수 있습니까? thxs.
UPD. 레이블의 텍스트는 선언 이후에 업데이트되며 텍스트의 길이는 서로 다를 수 있습니다. 그래서 layoutXProperty을 텍스트의 길이에 따라 달라 지도록 설정하고 CENTER에 배치하려고합니다.
UPD : 코드는 문제가 라벨 (변수 chkL)를 사용
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();
}
이 코드의 일부
를 삽입. 보시다시피, 저는 다른 레이블처럼 센터에 바인딩했습니다. 그러나이 레이블은 레이블의 변경 텍스트를 처음 반복 한 후에 alingment를 변경하고 that screen (label in border) 과 같이 보이기 시작합니다. 정확한 결과를 풀려고합니다. 바인딩이 작동하지만 예상 한 것과 다릅니다
[layout pane] (http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102)을 사용하는 대신 'layoutX'를 수동으로 설정하는 이유는 무엇입니까? 라벨을 가운데에 맞 춥니 다? –
실제로 나는 모른다. 나는 교육 목적을 위해 프로그램을 만들었고, 지금은 그것의 마지막으로 자세히 설명한다. 그러나 실현 방법을 바꿀 수 있다면 어쨌든 어떻게해야하는지 알고 싶습니다. –
당신이 설명하는대로 그렇게해서는 안됩니다. 미리 정의 된 레이아웃 창을 사용하거나 (고급) 자신 만의'창 '하위 클래스를 만들고 다양한 레이아웃 메소드 (특히'layoutChildren()')를 오버라이드해야합니다. 당신이 원하는 것을 수행하는 적절한 레이아웃 창이 거의 확실합니다. –