2016-04-05 1 views
1

カスタムコンポーネントの作成およびインポートでは、thisの後に来ます。ただし、jarファイルをクリックした後にインポートダイアログが表示された場合は表示されません。チュートリアルがコンストラクタに使用したコードをコメントアウトすると、再び表示されます。しかし、カスタムコンポーネントを作成するために使用したサブコンポーネントはまったく表示されません。どうして私はそれを修正するのですか?カスタムFXMLコンポーネント(コントローラー付き)は、SceneBuilderの「jarファイルのインポート」ダイアログに表示されません

また、自分自身のためにAnchorPaneの代わりにVBoxを使用しています(チュートリアルのように)。チュートリアルで見られるように、コンストラクタの

コード:

public CommodityImageLabel() { 
    FXMLLoader fxmlLoader = new FXMLLoader(
      getClass().getResource("/fxml/CommodityImageLabel.fxml")); 

    fxmlLoader.setRoot(this); 
    fxmlLoader.setController(this); 

    try { 
     fxmlLoader.load(); 
    } catch (IOException exception) { 
     throw new RuntimeException(exception); 
    } 

} 

コード私自身の例のコンストラクタについて:

public While() { 
    FXMLLoader fxmlLoader = new FXMLLoader(
      getClass().getResource("BlocksFXML/While.fxml")); 


    fxmlLoader.setRoot(this); 
    fxmlLoader.setController(this); 

    try { 
     fxmlLoader.load(); 
    } catch (IOException exception) { 
     throw new RuntimeException(exception); 
    } 
} 

EDIT1:私はコードの部分をコメントアウトしようとした、と私はコメントアウトしたときtry-catch部分では、コンポーネントがダイアログに表示されますが、サブコンポーネントは表示されません。

編集2:カスタムコンポーネントは基本的に、LabelとTextFieldを持つHboxを含むVBoxです。 Hereは、try-catch部分がなくても正常にインポートされたときのように見えるものと思われるものです。

+0

することができます[編集]が表示されないコードの例を含むようにあなたの質問? –

+0

@ James_D FXMLが完成したので、何を意味するのかは分かりませんが、コンポーネントをSceneBuilderにインポートするときのように表示されません。彼らが役に立つなら、私は写真を含めた。 – choochoomattress

+0

多分私は誤解しました。チュートリアルのバージョンが動作しないと言っていますか?あなた自身の例だけがうまくいかないと思った。どのシーンビルダのバージョンを使用していますか? –

答えて

0

私はここで情報を使用して、これを解決:私は彼らに同じ名前を与えた(

  1. をFXMLファイルとルートノードを拡張するJavaクラスを作成します。

    http://www.cuchazinteractive.com/blog/custom-javafx-controls-and-scene-builder

    を要約します)

  2. fx:rootをベースノードにするようにFXMLファイルを変更します。
  3. fx:controller属性(これなしでは動作しません)
  4. コンパイルを削除し、シーンビルダしかし

にjarファイルを追加します(これなしでは動作しません)、私が発見したカスタムコントロールが依存する場合に他のライブラリからのコントロールは、他のライブラリがシーンビルダーに読み込まれても失敗します。以下は

最小を例取り組んでいる

FXML:

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

<?import javafx.scene.control.Button?> 
<?import javafx.scene.layout.AnchorPane?> 


<fx:root id="AnchorPane" prefHeight="73.0" prefWidth="112.0" type="AnchorPane" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111"> 
    <children> 
     <Button layoutX="25.0" layoutY="28.0" mnemonicParsing="false" text="Button" /> 
    </children> 
</fx:root> 

のJava:

package my.amazing.controls; 

import java.io.IOException; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.layout.AnchorPane; 

public class TestControl extends AnchorPane { 


    public TestControl() throws IOException { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("TestControl.fxml")); 
     loader.setRoot(this); 
     loader.setController(this); 
     loader.load(); 
    } 

    @FXML 
    public void initialize() { 
    } 
} 
関連する問題