2017-09-25 11 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

あなたは単にこれをあなたが描写するようにしてはいけません。あらかじめ定義されたレイアウトペインを使用するか、独自の 'Pane'サブクラスを作成して、さまざまなレイアウトメソッド(特に' 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));センターでラベルアライメントを行います。今私は同じことをしたいが、それはラベルのテキストの長さを考慮する必要があります。あなたは私にこのようにする方法をお勧めできますか? –

関連する問題