2016-12-04 11 views
0

こんにちは私はJavaFXのと私の冒険を開始充填、私はテーマを作るためにSceneBuilderを使用し、 これは私のXMLFILEです:http://pastebin.com/9fvhREKc コントローラ:JavaFXの中FXMLファイルからリストビュー、空のリストビュー

public class Controller { 

@FXML 
private ListView templates; 
@FXML 
private ImageView image; 

@FXML 
void initalize() { 
    ObservableList elements = FXCollections.observableArrayList(); 
    elements.add("first"); 
    elements.add("second"); 
    elements.add("third"); 
    image.setImage(new Image("file:test.jpg")); 
    templates.setItems(elements); 
} 

} と私のメインクラス

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) throws Exception { 
    FXMLLoader loader = new FXMLLoader(); 
    loader.setLocation(this.getClass().getResource("Sample.fxml")); 
    Controller controller = new Controller(); 
    loader.setController(controller); 
    Pane root = loader.load(); 
    Scene scene = new Scene(root); 
    primaryStage.setTitle("Hello World!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

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

} と私は、アプリケーションを起動したときに、私のテーマの作品が、リストとイメージが空である;/

答えて

1

コントローラのinitialize方法はload()プロセスの一部として呼び出されるので、あなたは、あなたがFXMLをロード前に、コントローラを設定する必要があります。方法:

FXMLLoader loader = new FXMLLoader(); 
loader.setLocation(this.getClass().getResource("Sample.fxml")); 
Controller controller = new Controller(); 
loader.setController(controller); 
Pane root = loader.load(); 
Scene scene = new Scene(root); 

はまた、あなたがあなたのControllerクラスのタイプミスを持って注意してください名前initializeのスペルが間違っています。

public class Controller { 

    @FXML 
    private ListView templates; 
    @FXML 
    private ImageView image; 

    @FXML 
    // void initalize() { 
    void initialize() { 
     ObservableList elements = FXCollections.observableArrayList(); 
     elements.add("first"); 
     elements.add("second"); 
     elements.add("third"); 
     image.setImage(new Image("file:test.jpg")); 
     templates.setItems(elements); 
    } 

} 
+0

私は(loader.load前にこのloader.setControllerを上に移動)が、私のリストは空のままである;/ – Larry

+0

@:FXMLLoaderが見つけ、この方法を実行するためにリフレクションを使用しているので、これが実行されてからメソッドを防ぐことができますLarry [MCVE](つまり、ListViewだけを表示し、他に何も表示しないアプリケーション)を作成し、あなたの質問に完全な最小限の例を投稿します。上記がうまくいかない場合は、あなたが投稿していないコードで何か問題があります。 –

+0

今見て、私は編集したスレッド – Larry

関連する問題