2016-12-04 3 views
0

Здравствуйте я, начиная мое приключение с JavaFX, я использую SceneBuilder сделать тему, это мой XMLFILE: http://pastebin.com/9fvhREKc контроллера:Заполнение ListView из FXML файла в JavaFX, пустой ListView

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

Вы должны установить контроллер перед тем вы загрузите FXML, так как initialize метод контроллера вызывается как часть load() процесса:

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 с ошибкой. Поскольку FXMLLoader использует отражение, чтобы найти и выполнить этот метод, это позволит предотвратить метод от выполняется:

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.setController перед тем loader.load(), но мой список еще пуст;/ – Larry

+0

@ Ларри Создайте [MCVE] (т. Е. Приложение, которое * просто * показывает «ListView» и ничего больше) и опубликует полный минимальный пример в вашем вопросе. Если вышеуказанное не работает, что-то не так с кодом, который вы не опубликовали. –

+0

Посмотрите сейчас, я отредактировал нить – Larry

Смежные вопросы