2016-12-02 10 views
1

ラベルが少なく、textFieldが少ないカスタムコンポーネントがあります。私はそれを3回インスタンス化する必要がありますが、各バージョンには、すべて異なる文字列でプレフィックスが付けられていなければなりません。私のコンポーネントFXMLのコントローラコードからfxmlビューに変数を渡すには?

フラグメント:

<Label text="inclusions type:"/> 
<Label text="inclusions size:" GridPane.rowIndex="1"/> 
<Label text="inclusions number:" GridPane.rowIndex="2"/> 

のように私は、コードのプレースホルダーのいくつかの種類を達成したいと思います。私が知っているように私は、すべてのラベルを一つずつ注入回避しよう

<Label text="$variable inclusions type:"/> 
<Label text="$variable size:" GridPane.rowIndex="1"/> 
<Label text="$variable number:" GridPane.rowIndex="2"/> 

すべてのラベルをexのようなコントローラに一度に注入する可能性はありません。 Collection<Label> allLabels;

質問:重複や不要な作業を避けるために、コントローラコードからfxmlビューに文字列を渡すにはどうすればよいですか?

+1

あなたが動的にコンポーネントを追加したい場合は、Javaコードでインスタンス化し、シーンに追加する必要があります! Fxmlは、静的コンポーネントを手動で定義するためのものです。 Fxmlファイルに動的コンポーネントが含まれている必要はありません。 – Omid

+0

私は理解していますが、.fxmlファイルと "Swing style"コードを一緒に使用することは、私にとってはうまくありません。しかし私は少し賢明ではありません:D –

+1

私は誤解したと思います。ラベルのテキストの一部を注入し、いくつかの可変テキストで多くのラベルを注入したくない場合は、意味があります。 – Omid

答えて

2

FXMLでbinding expressionを使用して、FXML名前空間から変数値を取得することができます。

次の例では、「Foobar」という名前を正常に挿入します。

foobar

inclusions.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.VBox?> 

<VBox spacing="10" xmlns:fx="http://javafx.com/fxml"> 
    <Label text="${name + ' inclusions type'}"/> 
    <Label text="${name + ' inclusions size'}"/> 
    <Label text="${name + ' inclusions number'}"/> 
</VBox> 

NamespaceAware.java

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

public class NamespaceAware extends Application { 
    @Override 
    public void start(final Stage stage) throws Exception { 
     FXMLLoader loader = new FXMLLoader(); 
     loader.getNamespace().put("name", "Foobar"); 
     loader.setLocation(getClass().getResource("inclusions.fxml")); 
     Pane content = loader.load(); 

     content.setPadding(new Insets(10)); 

     stage.setScene(new Scene(content)); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

私はこれを試しましたが、一重引用符を見つけられず、FxmlLoaderが例外を投げました。ありがとう!!! –

+0

シーンビルダ(OracleとGluonの両方)は連結をサポートしていないようです。 –

+1

ええ、それはあなたがグルーオンで取り上げなければならないものです。私はあなたがそれをどうやって行うのか分かりません。奇妙なことに、彼らのサポートページはStackOverflowにリンクしており、サポートページには問題追跡ツールのリンクが表示されません。たぶんあなたがグルーオンの質問にタグを付けるだけであれば、調査するかもしれません。 Gluonは商業的なサポートも提供しており、そのページにリンクを要求しているので、それが可能なルートです。 Intellijのアイデア検査でも、式を正しく解析できません。したがって、機能リクエストはIntellijに対して提出することもできます。 – jewelsea

関連する問題