2013-08-09 12 views

risposta

10

Non conosco il motivo della tua domanda. Se quello che vuoi è inserire alcuni nodi dinamicamente durante l'inizializzazione dell'applicazione o della scena, ti suggerisco di usare un initialize method sul tuo controller.

Questo metodo deve essere annotato con @FXML e hanno la seguente firma:

void initialize() 

Quindi, è possibile iniettare il contenitore in cui il pulsante deve essere inserito sul controller e aggiungere il pulsante ad esso:

@FXML 
HBox buttonBox // assuming your button container is a HBox 
... 

@FXML 
protected void initialize() { 
    buttonBox.getChildren().add(new Button("Click me!")); 
} 

Il metodo initialize viene chiamato dopo la creazione dei componenti definiti nel file FXML.

4

Ecco un modo per farlo:

((VBox) root).getChildren().add(new Button("Java Button")); 

Il frammento sopra presuppone che il contenitore superiore definita nel FXML è un VBox, se non è un VBox, solo il cast a qualsiasi tipo avete scelto.

Mi chiedo come posso determinare il tipo del contenitore in fase di esecuzione, in modo da poter scrivere un codice più generico.

Il tipo è probabilmente un Pane, quindi il casting in un riquadro funzionerà nella maggior parte dei casi. L'utilizzo di un riquadro di layout come genitore è generalmente consigliato per la maggior parte delle attività di layout in JavaFX.

+0

Questo approccio è più semplice e ha funzionato bene per me. Mi chiedo come posso determinare il tipo di contenitore in fase di esecuzione, quindi posso scrivere un codice più generico. –

+0

root instanceof xxx o use getClass() dovrebbe funzionare per testare o utilizzare reflection per trovare il metodo desiderato? – tomasb

Problemi correlati