2015-09-30 24 views
7

ボタンがonMouseClicked属性のFXMLファイルがあります。私はコンストラクタにコントローラに提供したいデータを注入しているので、FXMLにコントローラを設定しません。コントローラをプログラマチックに設定しているときに「トップレベル要素にコントローラが指定されていません」

<Button mnemonicParsing="false" onMouseClicked="#newWidgetRequestButtonClicked" text="New Widget..." /> 

私はコントローラをプログラマチックに設定しており、コントローラにはFXMLで指定されたメソッドが含まれています。コントローラの機能が実行され、すべて正常に動作します。

FXMLLoader loader = new FXMLLoader(getClass().getResource("MainView.fxml")); 
MyController controller = new MyController(...); 
loader.setController(controller); 

私の問題は、IntelliJの.fxmlファイルの検査にあります。関数参照が出現するたびに、「Error:(45、54)最上位エレメントにコントローラーが指定されていません」と報告されます。私はIntelliJの検査ルールを見ていて、このルールはJavaFXセクションには表示されません。ここでも、プログラムはうまく構築され実行されるため、実際のコンパイルエラーではありません。このエラー通知を無効にします。

このエラーを回避するにはどうすればよいですか?

答えて

2

トップレベル要素fx:controllerを追加する必要があります。

fxmlのようなボタンが付いたちょうどアンカーペインを持つ基本的なfxmlファイルがあるとします。

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

<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <Button layoutX="102.0" layoutY="50.0" mnemonicParsing="false" text="Button" /> 
    </children> 
</AnchorPane> 

この場合、最上位の要素がアンカーペインになります。 onMouseClickedのようなアクションボタンを使用したい場合は、下のようにトップレベル要素(この場合はアンカーペイン)のコントローラクラスをfxmlに伝える必要があります。

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

<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.Controller"> 
    <children> 
     <Button fx:id="buttonExample" layoutX="102.0" layoutY="50.0" mnemonicParsing="false" text="Button" /> 
    </children> 
</AnchorPane> 

fx:controller="com.example.Controller"ラインは、私のコントロールクラスは、com.exampleパッケージであるコントローラであると述べています。

また、要素のIDは、例のようにfxで始まる必要があります(fx:id="buttonExample")。

+1

コントローラーを指定すると、コントローラークラスのテキストフィールド、ボタンにアクセスしようとするとnullpointer例外が発生します。 –

1

でも、私はそれらの通知が嫌いです。私はコントローラをプログラマチックに設定しました。これを無効にするには、ハイライトレベルをnoneに設定する必要があります。 これを行うには、fxmlファイルを開き、右側の一番下にヘクターアイコンが表示されます。ヘクターアイコンをクリックし、スライダーをドラッグしてハイライトレベルをnoneに設定します。

変更を有効にするには、IDEを再起動する必要があります。そのファイルのハイライト表示はnoneに設定されます。他のファイルでは、強調表示レベルをnoneに設定するまで、強調表示の動作に変化は見られません。

ヘクターアイコンが見つからない場合は、次のリンクを使用してください。 https://www.jetbrains.com/help/idea/status-bar.html

関連する問題