2016-10-21 3 views
0

私はJavaFXでFXMLを使ってグラフィカルインターフェイスを開発しています。私はそれの幅/高さに子ノードの幅/高さを結合するために、この方法を発見した親ノードです:FXML:子の幅/高さを親の幅/高さに結び付ける優雅な方法

<Node fx:id="parent"> 
    <children> 
     <Node prefWidth=${parent.width}></Node> 
    <children> 
</Node> 

しかし、それは洗練感じています。私はむしろノードにIDを与える必要はないので、子ノードはその次元を参照することができます。ノードのparentを参照するためのいくつかの方法がありますか?たぶんprefWidth=${parent.width}のようなものでしょうか?

注:これはJavaからプログラムで実行できますが、これは私がここで必要なものではありません。私はFXMLでこれを行う方法を探しています。

+0

[式バインディング](のhttp:/ /docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#expression_binding)は、 'FXMLLoader'名前空間に関連して解決されます。そのため、式の根を名前空間に入れて、これを動作させる必要があります。 FXMLでこれを行う唯一の方法は、コードスニペットのように 'fx:id'を使うことです。だから、これは本質的にあなたがこれを作ることができるようにエレガントです。ノードには 'parent'プロパティがあるので、' 'を実行できるはずですが、最高でも。 –

+0

私は、あなたが何かを縛らないでこの機能を一般的に達成することを指摘する価値はあると思いますが、正しい構成で適切なレイアウトペインを使用してください。例えば。親に対して 'VBox'を使用する場合は、' fillWidth = "true" 'を設定し、' maxWidth'が子などで無制限であることを確認してください。 –

+0

ああ、あなたはノードの親を参照することができます。それはコードが移植性があるので、はるかに優れています。 FXMLに 'this'の相当物があるので、' this.parent.width'のようなものを呼び出すことができますか?あるいは、内部ノードにIDを与える必要がありますか? –

答えて

5

表現バインディングは、FXMLLoadernamespaceの要素を参照することによって機能します。 「現在のノード」(私が知っている)を指すための「」の概念はありません。だから、ノードの親にアクセスするための唯一の方法は、名前空間の一部であることをノード自体のためである:あなたは、ノード自体にfx:idを設定することによって、これを達成することができます

<Pane> 
    <children> 
     <Node fx:id="node" prefWidth="${node.parent.width}"></Node> 
    <children> 
</Pane> 
関連する問題