Como faço para popular um combobox utilizando somente Controller para passar para View?

Como faço para popular um combobox utilizando somente Controller para passar para View? É possível?

Sim, entretanto, javafx é muito agressivo, pelo menos no começo, depois que você consegue realizar as ligações, fica mais tranquilo, na verdade, acho até +facil que swing.

Ocorre que no javaSE, você consegue trafegar as mensagens com mais facilidade, no javafx, no meu caso, eu tive que criar a facilidade.

Eu estou fazendo um trabalho de curso com javaFX (opção mesmo) então vou compartilhar o rascunho.

Se você compreender o rascunho, vai trabalhar só no controller.

O correto é você procurar modelos MVC, pois eu não me guiei por nenhum em particular, pois só conheço a teoria.

Outra, quando você errar, pra debugar o código, procure pelas linhas que possuem caused by.

Veja o “ossário”:

package ambiente;

import tela.TipoCena;
import tela.Cenario;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javafx.application.Application;
import javafx.stage.Stage;

public class Ambiente extends Application {

    private final Set<Cenario> CENARIOS = new HashSet();
    private Stage palco;
    private TipoCena cenaAtual;

    @Override
    public void start(Stage primaryStage) {
        carregarCenarios();
        palco = primaryStage;
        atualizarCena(TipoCena.EXEMPLO);
    }

    private void carregarCenarios() {
        CENARIOS.addAll(Arrays.asList(
                cenario(TipoCena.EXEMPLO)

        ));
    }

    private Cenario cenario(TipoCena tipoCena) {
        return new Cenario(tipoCena, this);
    }

    public Cenario encontrarCenario(TipoCena tipoControler) {
        return CENARIOS.stream()
                .filter(cenario -> cenario.getTipoCena() == tipoControler)
                .findFirst()
                .orElse(null);
    }

    public void atualizarCena(TipoCena tipoCena) {
        Cenario cenario = encontrarCenario(tipoCena);
        atualizarFechamento(cenario);
        palco.setScene(cenario.getCena());
        palco.setTitle(cenario.getTitulo());
        palco.setResizable(cenario.isResisable());
        cenaAtual = tipoCena;
        palco.show();
    }

    private void atualizarFechamento(Cenario cenario) {
        palco.setOnCloseRequest((event) -> {
            if (!cenario.getController().sair()) {
                event.consume();
                System.out.println("Continuamos na aplicação");
                return;
            }
            System.out.println("Saimos da aplicação");
        });
    }

    public TipoCena getCenaAtual() {
        return cenaAtual;
    }

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


package tela;

import ambiente.Ambiente;
import java.io.IOException;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;

public final class Cenario {

    private Scene cena;
    private TipoCena tipoCena;
    private FXMLLoader loader;
    private boolean resisable;

    public Cenario(TipoCena tipoCena, Ambiente ambienteExecucao) {
        try {
            loader = new FXMLLoader(tipoCena.classe.getResource(tipoCena.nomeArquivoFxml));
            cena = new Scene(loader.load());
            this.tipoCena = tipoCena;
            getController().setAmbienteExecucao(ambienteExecucao);
        } catch (IOException ex) {
            Logger.getLogger(Cenario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Controller getController() {
        return loader.getController();
    }

    public TipoCena getTipoCena() {
        return tipoCena;
    }

    public String getTitulo() {
        return tipoCena.titulo;
    }

    public Scene getCena() {
        return cena;
    }

    @Override
    public int hashCode() {
        return 43 * 5 + Objects.hashCode(this.tipoCena);
    }

    @Override
    public boolean equals(Object outroCenario) {
        if (this == outroCenario) {
            return true;
        }
        if (outroCenario == null) {
            return false;
        }
        if (getClass() != outroCenario.getClass()) {
            return false;
        }
        return this.tipoCena == ((Cenario) outroCenario).tipoCena;
    }

    public boolean isResisable() {
        return resisable;
    }

    public void setResisable(boolean resisable) {
        this.resisable = resisable;
    }

    
}



package tela;

import ambiente.Ambiente;
import javafx.fxml.Initializable;

public abstract class Controller implements Initializable {

    protected Ambiente ambienteExecucao;

    protected void setAmbienteExecucao(Ambiente ambienteExecucao) {
        this.ambienteExecucao = ambienteExecucao;
    }

    public abstract boolean sair();
}



package tela;

import java.util.Arrays;
import javafx.scene.control.TextField;

public interface Formulario {

    boolean validar();

    void submeter();

    void limparFormulario();

    default void limparCampos(TextField... campos) {
        Arrays.stream(campos).forEach(campo -> campo.setText(""));
    }
}



package tela;

import tela.combo_box.QualquerControler;

//A organização para acesso futuro dos controles fica nesta enumeração

public enum TipoCena {
    EXEMPLO(QualquerControler.class, "Teste ComboBox", "comboBox");

    public final Class classe;
    public final String titulo, nomeArquivoFxml;

    private TipoCena(Class classe, String titulo, String nomeArquivoFxml) {
        this.classe = classe;
        this.titulo = titulo;
        this.nomeArquivoFxml = nomeArquivoFxml + ".fxml";
    }

}



package tela.combo_box;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javax.swing.JOptionPane;
import tela.Controller;

public class QualquerControler extends Controller implements Initializable {

    @FXML
    private TextField txtItem;
    @FXML
    private ComboBox<String> comboItens;

    @FXML//se for public, não precisa da anotação
    private void popularComboItem() {
        comboItens.setPromptText("Selecione um item");
        comboItens.getItems().add(txtItem.getText());
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        comboItens.setPromptText("Insira um item");
    }

    @Override
    public boolean sair() {
        return JOptionPane.showConfirmDialog(null, "sair") == JOptionPane.YES_OPTION;
    }

}

… Abaixo o arquivo fxm/“view”.

<?xml version="1.0" encoding="UTF-8"?>

<?import java.net.URL?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" styleClass="mainFxmlClass" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111" fx:controller="tela.combo_box.QualquerControler">
    <stylesheets>
        <URL value="@combobox.css" />
    </stylesheets>
   <children>
      <ComboBox fx:id="comboItens" layoutX="215.0" layoutY="175.0" prefWidth="150.0" />
      <TextField fx:id="txtItem" layoutX="215.0" layoutY="87.0" />
      <Button layoutX="215.0" layoutY="133.0" mnemonicParsing="false" onAction="#popularComboItem" prefHeight="25.0" prefWidth="149.0" text="Popular" />
   </children>
</AnchorPane>

… Abaixo o arquivo css :joy:

.button{
 -fx-text-fill: red;
}

Obs.: tem menos de trinta dias que estou mexendo com javaFX de forma objetiva, por isso, pode ser que haja algo meio fora de série.

Depois de dois meses, começe com android, você vai ver muitas semelhanças.
Passe pra html, novamente vai encontrar coisas comuns.
Lembre de procurar referências em MVC.

Estrutura dos pacotes:



Para fins de comparação, este é o meu projeto para a composição da próxima nota:

A base é apenas dois pacotes:
Ambiente e tela.

Estou utilizando Spring MVC , funciona do mesmo jeito?

Só conheço o spring de nome eu não trabalho com programação, apenas estudo e faço traquinagens.

Tem no mínimo dois participantes aqui no fórum que são feras em javaFX, mais eu não lembro o nome deles.

Exemplo de traquinagem:

Editado:
Outro exemplo de traquinagem:


Digo que dá pra integrar sim, só não me pergunte como pois não assisti o vídeo.