10

JavaFX と SceneBuilder 1.1 でカスタム コントロールを作成しようとしています。

私はこのコードを持っています:

FXML


<?import libreria.javaFX.componentes.componenteTextField.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <CustomComponent fx:id="pastaTxt" layoutX="69.0" layoutY="87.0" prefWidth="200.0" />
  </children>
</AnchorPane>

CustomComponent.java


package libreria.javaFX.componentes.componenteTextField;

import javafx.scene.control.TextField;

public class CustomComponent extends TextField {

public CustomComponent() {
    super();
    // TODO Auto-generated constructor stub
}

public CustomComponent(String arg0) {
    super(arg0);
    // TODO Auto-generated constructor stub
}

}


SceneBuilder から開こうとすると、次のように表示されます。

欠落しているタイプは次のとおりです: [CustomComponent]

そして、クラスパスを指定する機会が与えられます(これでも問題は解決しません)。

次のように、インポートステートメントにもクラスを配置してみました。

<?import libreria.javaFX.componentes.componenteTextField.CustomComponent?>

しかし、それはClassNotFoundException.

なぜこれが起こっているのかについてのアイデアはありますか?


詳しくは

これらのクラスだけで新しいプロジェクトを作成しました。

ここに画像の説明を入力

コードは次のとおりです。

CustomControl.fxml

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

<?import custom.CustomControl?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?scenebuilder-classpath-element ../../bin/custom?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <CustomControl layoutX="51.0" layoutY="100.0" prefWidth="200.0" />
  </children>
</AnchorPane>

CustomControl.java

package custom;

import javafx.scene.control.TextField;

public class CustomControl extends TextField {

    public CustomControl() {
        super();
    }

public CustomControl(String arg0) {
    super(arg0);

    }
}

そして、私はまだ同じ問題を抱えています。ダイアログでクラスパスを指定すると、すべてが正しいように見えますが、SceneBuilderを開くと同じエラーが発生します。


最後の情報

ソリューションにアプローチしようとして、このプロジェクトを Eclipse で試しました。その結果、Eclipse ではウィンドウが正常に表示されますが、SceneBuilder ではこれらのエラーが引き続き発生します。この手がかりが役立つことを願っています。

Scene Builder でこの種のカスタム コントロール定義を行ったことがあれば、例を挙げて教えてください。私たちのプロジェクトにとって非常に役立ちます。

4

2 に答える 2

4

これは、シーン ビルダを実行する Java ランタイムがコントロール クラスをロードできるようにする正しいクラスパスが指定されていないことが原因です。

Eclipse を実行していて、クラスに名前空間がある場合custom.MyControlは、カスタム ディレクトリではなく bin ディレクトリを指定します。Maven プロジェクトでは、target/classes ディレクトリを指定する必要があります。

ここで自分のプロジェクトの例を参照してください: https://bitbucket.org/atil/estimate/src/22390a2ca034b55f1916e46435b714e5c489b90e/src/main/resources/projmon/gui/workTree.fxml?at=master

多くの場合、相対ファイル パスはシーン ビルダーによって作成されるため、ファイルを移動するとクラス パスが壊れ、再指定する必要があります。

于 2013-05-24T20:50:17.573 に答える
1

遅いかもしれませんが、私がしたことをお話ししたいと思います。J8、Eclipse IDE、Scenebuilder 2.0 を使用しています。

1) Eclipse IDE で、Window->Show View > Navigator から Navigator ビューを開きます。 2) プロジェクトで、右クリックして、SB (Scene Builder) で表示するクラスの [Properties] を選択します。Resource セクションから、生成されたクラスの場所を確認します。たとえば、次のような場所が表示されます。/TableViewDemo/bin/com/company/jfx8/example/fxmltableview/FormattedTableCellFactory.class

3) このアドレスをコピーして、次のような fxml を追加します。

<?scenebuilder-classpath-element ../../../../TableViewDemo/bin/com/company/jfx8/example/fxmltableview/FormattedTableCellFactory.class?> 

4) それを保存して、作業を楽しんでください:)

于 2015-04-08T18:55:49.057 に答える