2016-09-02 5 views
4

Я создаю графический интерфейс с помощью Scene Builder, и большинство моих сцен имеют один общий элемент (кнопка дома типа iOS внизу). Мне было интересно, можно ли определить этот компонент в отдельном файле fxml. Из проведенного мной исследования существует аналогичный процесс для объявления повторно используемого компонента, но только в том же файле fxml. Как я могу применить этот принцип для нескольких файлов fxml?JavaFX - многоразовый компонент FXML

+3

Как насчет использования BorderPane.The кнопка будет внизу, и вы измените только центр с файлами fxml. – GOXR3PLUS

+0

Простой и эффективный! Спасибо, я не думал об этом. –

ответ

0

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

Все кнопки выполняют одно и то же действие?

Parent root = FXMLLoader.load(getClass().getResource("fileName.fxml")); 

     ObservableList<Node> nodes = root.getChildrenUnmodifiable(); 
     String _id = "testButton"; 
     for (Node node : nodes) { 
      if (node.getId().equals(_id)) { 
       return node; 
      } 

     } 
     return null; 
} 
2

Вы можете сделать так:

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.MainController"> 
<children> 
<fx:include fx:id="someId" source="NestedFXML.fxml"/> 
</children> 

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.NestedFXMLController"> 
</AnchorPane> 

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

public class MainController implements Initializable { 

    @FXML 
    private NestedFXMLController someIdController; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    // TODO Auto-generated method stub 

    } 
} 
public class NestedFXMLController implements Initializable { 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    // TODO Auto-generated method stub 

    } 
} 

Ницца: Вложенный контроллер может быть введен через FXML аннотацию. Имя поля должно соответствовать строке атрибута fx: id + «Контроллер»!

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