2015-03-30 2 views
4

Я пытаюсь создать fileChooser в файле fxml. Мой код выглядит следующим образом:Создать FileChooser в FXML

<HBox alignment="CENTER"> 
      <Label text="Tower 1 Image" /> 
      <TextField fx:id="tower1ImageField" /> 
      <FileChooser fx:id ="tower1FileChooser" /> 
</HBox> 

И контроллер считывает так:

public class HudBuilderController{ 
    @FXML TextField tower1ImageField; 
    @FXML FileChooser tower1FileChooser; 
    File towerFile; 
    @FXML TextField tower2ImageField; 
    @FXML FileChooser tower2FileChooser; 
} 

Однако я получаю сообщение об ошибке, что я не понимаю:

Caused by: java.lang.IllegalArgumentException: Unable to coerce [email protected] to class javafx.scene.Node. 
    at com.sun.javafx.fxml.BeanAdapter.coerce(Unknown Source) 
    at javafx.fxml.FXMLLoader$Element.add(Unknown Source) 
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(Unknown Source) 
    at javafx.fxml.FXMLLoader.processEndElement(Unknown Source) 
    ... 26 more 

I Я попытался создать экземпляр FileChooser внутри контроллера, но я думаю, что мне нужно добавить больше в файл fxml. Любая помощь? Благодаря!

ответ

3

FileChooser не распространяется от Node, поэтому вы не можете использовать его в своем FXML. Не забывайте, что FXML - это просто представление вашего пользовательского интерфейса. Нет необходимости добавлять все компоненты, которые вы хотите использовать в своем контроллере, в FXML.

Вам нужно только инициализировать FileChooser в контроллере:

FileChooser fileChooser = new FileChooser(); 
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt"); 
fileChooser.getExtensionFilters().add(extFilter); 
File file = fileChooser.showOpenDialog(primaryStage); 
System.out.println(file); 

JavaFX 8 API Reference: FileChooser

В конце FileChooser это диалоговое окно, которое открывается на экране. Не знаете, почему вы хотите иметь его в своем FXML? Просто используйте его в своем коде и работайте с файловой дорогой, которую вы получаете.

+2

Спасибо! Я думаю, что мне нужна кнопка, которая в прессе открывает файл выбора! – thb7

1

Свойство по умолчанию HBox - children, которое представляет собой список узлов. Поскольку FileChooser не является узлом, вы не можете добавить его в список дочерних узлов HBox.

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