2017-09-25 6 views
-1

나는 라벨입니다. 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) 과 같이 보이기 시작합니다. 정확한 결과를 풀려고합니다. 바인딩이 작동하지만 예상 한 것과 다릅니다

+2

[layout pane] (http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102)을 사용하는 대신 'layoutX'를 수동으로 설정하는 이유는 무엇입니까? 라벨을 가운데에 맞 춥니 다? –

+0

실제로 나는 모른다. 나는 교육 목적을 위해 프로그램을 만들었고, 지금은 그것의 마지막으로 자세히 설명한다. 그러나 실현 방법을 바꿀 수 있다면 어쨌든 어떻게해야하는지 알고 싶습니다. –

+0

당신이 설명하는대로 그렇게해서는 안됩니다. 미리 정의 된 레이아웃 창을 사용하거나 (고급) 자신 만의'창 '하위 클래스를 만들고 다양한 레이아웃 메소드 (특히'layoutChildren()')를 오버라이드해야합니다. 당신이 원하는 것을 수행하는 적절한 레이아웃 창이 거의 확실합니다. –

답변

1

올바른 레이블 지정 방법은 레이아웃 창을 사용하고 창 및/또는 레이블을 가운데 맞춤이되도록 구성하는 것입니다.

<BorderPane> 

    <top> 
     <Label alignment="CENTER" text="A Label" fx:id="myLabel"> 
      <maxWidth><Double fx:constant="POSITIVE_INFINITY"/></maxWidth> 
     </Label> 
    </top> 

    <center> 
     <!-- other content ... --> 
    </center> 

    <!-- other BorderPane regions as required --> 

</BorderPane> 

여기에 모든 설정

는 장면을 사용하여 만들 수 있습니다 : 당신은 수평 레이아웃 (또는 레이아웃의 영역)의 상단 중앙에 레이블을 원하는 경우 예를 들어, 다음과 같이, 당신은 BorderPane을 사용할 수 있습니다 Builder를 사용하도록 선택한 경우.

+0

감사합니다. 그래, 작동하지만, 어떻게 작동하는지 배우기 위해 바퀴를 재발 명하려는 시도 : –

+0

@ Дмитрий 이렇게하려면'Pane'을 서브 클래스 화하고'layoutChildren()'과 다양한'compute ... ()'메소드를 호출합니다. 레이아웃 창 중 하나의 소스 코드 (예 : ['HBox'] (http://hg.openjdk.java.net/openjfx/9/rt/file/c734b008e3e8/modules/javafx.graphics/src/main/java/javafx/scene/layout/HBox.java) 다른 레이블에 대해 –

+0

다음 코드를 사용합니다. labelUp.layoutXProperty(). bind (pane.widthProperty(). subtract (labelUp.widthProperty()). divide (2)); 센터에서 Label aligment를합니다. 이제는 동일하게하고 싶지만 레이블 텍스트의 길이를 고려해야합니다. 이런 식으로하는 방법을 추천 해 주시겠습니까? –