Vou colocar aqui os códigos que tenho até o momento:
FrmListVeicApp
essa é a classe que estou usando para chamar o xml feito no scene builder
public class FrmListVeicApp extends Application {
public static Stage stage;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FrmListVeic.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
FrmListVeicApp.stage = stage;
}
public static void main(String[] args) {
launch(args);
}
public static Stage getStage() {
return stage;
}
public static void setStage(Stage stage) {
FrmListVeicApp.stage = stage;
}
}
FrmListVeicCont
classe que faz o controller
public class FrmListVeicCont implements Initializable {
@FXML
private AnchorPane anchorListVeic;
@FXML
private Pane paneListVeic;
@FXML
private Button btnNovoVeic;
@FXML
private Button btnEditVeic;
@FXML
private Button btnDelVeic;
@FXML
private Pane paneTbVeic;
@FXML
private TableView<Veiculo> tbVeiculo;
@FXML
private TableColumn<Veiculo, Integer> columnCodVeic;
@FXML
private TableColumn<Veiculo, String> columnMarcaVeic;
@FXML
private TableColumn<Veiculo, String> columnModeloVeic;
@FXML
private TableColumn<Veiculo, String> columnPlacaVeic;
@FXML
private TableColumn<Veiculo, String> columnPropVeic;
@FXML
private TextField txtPesqVeic;
@FXML
private Button btnBuscaVeic;
@FXML
private RadioButton radioPlaca;
@FXML
private RadioButton radioProprietario;
@FXML
private Button btnRefresh;
private Veiculo veiculo;
private VeiculoController controller;
private List<Veiculo> lista;
private static Stage stage;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
initTableColumn();
//BOTÃO PARA CADASTRAR NOVO VEICULO
btnNovoVeic.setOnAction((ActionEvent event) -> {
try {
new FrmCadVeicApp().start(new Stage());
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex, "Erro ao abrir tela", JOptionPane.ERROR_MESSAGE);
}
});
//BOTÃO PARA EDITAR VEICULO
btnEditVeic.setOnAction((ActionEvent event) -> {
try{
editar();
}catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Erro ao Cadastrar");
}
});
btnDelVeic.setOnAction((ActionEvent event) -> {
try{
veiculo = tbVeiculo.getSelectionModel().getSelectedItem();
controller = new VeiculoController();
controller.excluir(veiculo);
initTableColumn();
}catch(Exception e) {
e.printStackTrace();
if(tbVeiculo.getSelectionModel().getSelectedItem() == null) {
JOptionPane.showMessageDialog(null, "Selecione uma linha da tabela para excluir!!");
}else{
JOptionPane.showMessageDialog(null, "Erro ao Excluir :"+e.getMessage());
}
}
});
btnBuscaVeic.setOnAction((ActionEvent event) -> {
});
btnRefresh.setOnAction((ActionEvent event) -> {
initTableColumn();
});
}
private void initTableColumn() {
ObservableList<Veiculo> veiculos = FXCollections.observableArrayList(carregaLista());
tbVeiculo.setItems(veiculos);
columnCodVeic.setCellValueFactory(new PropertyValueFactory<>("idVeiculo"));
columnMarcaVeic.setCellValueFactory(new PropertyValueFactory<>("marcaVeiculo"));
columnModeloVeic.setCellValueFactory(new PropertyValueFactory<>("modeloVeiculo"));
columnPlacaVeic.setCellValueFactory(new PropertyValueFactory<>("placaVeiculo"));
columnPropVeic.setCellValueFactory(new PropertyValueFactory<>("nomeDonoVeiculo"));
}
public List<Veiculo> carregaLista() {
controller = new VeiculoController();
lista = controller.listar();
return lista;
}
public static Stage getStage() {
return stage;
}
public static void setStage(Stage stage) {
FrmListVeicCont.stage = stage;
}
public void editar() {
try {
veiculo = new Veiculo();
veiculo = tbVeiculo.getSelectionModel().getSelectedItem();
if(tbVeiculo.getSelectionModel().getSelectedItem() == null) {
JOptionPane.showMessageDialog(null, "Selecione uma linha na tabela para edição!");
}else{
FrmEditVeicApp tela = new FrmEditVeicApp();
tela.start(new Stage());
}
} catch (Exception ex) {
Logger.getLogger(FrmListVeicCont.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
FrmCadVeicApp
classe que chama a tela de cadastro.
public class FrmCadVeicApp extends Application {
private static Stage stage;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FrmCadVeic.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
FrmCadVeicApp.stage = stage;
}
public static void main(String[] args) {
launch(args);
}
public static Stage getStage() {
return stage;
}
public static void setStage(Stage stage) {
FrmCadVeicApp.stage = stage;
}
}
FrmCadVeiculo
esse é o controller da tela do cadastro de veiculo , ainda está com o método feio que criei para atualizar a table view mas já estou estudando sobre o design observer…
public class FrmCadVeiculo implements Initializable {
@FXML
private AnchorPane anchorCadVeic;
@FXML
private Pane paneCadVeic;
@FXML
private Label lblProp;
@FXML
private TextField txtNomeDono;
@FXML
private TextField txtCpfDono;
@FXML
private Label lblMod;
@FXML
private TextField txtModelo;
@FXML
private Label lblMarc;
@FXML
private TextField txtMarca;
@FXML
private Label lblCpf;
@FXML
private Label lblUf;
@FXML
private ComboBox<?> comboUf;
@FXML
private Label lblPlaca;
@FXML
private TextField txtPlaca;
@FXML
private Label lblAno;
@FXML
private TextField txtAno;
@FXML
private Label lblCor;
@FXML
private TextField txtCor;
@FXML
private Label lblKm;
@FXML
private TextField txtKm;
@FXML
private TextField txtUfVeic;
@FXML
private Button btnCadVeic;
@FXML
private Button btnSairCadVeic;
private Veiculo veiculo;
private VeiculoController controller;
private FrmListVeicCont fmrListCtrl;
private static Stage stage;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
btnCadVeic.setOnAction((ActionEvent event) -> {
veiculo = new Veiculo();
controller = new VeiculoController();
veiculo.setAnoVeiculo(Integer.valueOf(txtAno.getText()));
veiculo.setCorVeiculo(txtCor.getText());
veiculo.setCpfDonoVeiculo(txtNomeDono.getText());
veiculo.setKmVeiculo(Double.valueOf(txtKm.getText()));
veiculo.setPlacaVeiculo(txtPlaca.getText());
veiculo.setMarcaVeiculo(txtMarca.getText());
veiculo.setModeloVeiculo(txtModelo.getText());
veiculo.setUfVeiculo(txtUfVeic.getText());
veiculo.setNomeDonoVeiculo(txtNomeDono.getText());
try{
controller.salvar(veiculo);
informationDialog("Information", "Cadastro de veiculo", "Veiculo cadastrado com sucesso");
limpaTxt();
atualizaTableView();
FrmCadVeicApp.getStage().close();
}catch(Exception e) {
e.printStackTrace();
warningDialog("Erro", "Erro ao cadastrar", "Erro ao cadastrar :"+e.getMessage());
}
});
btnSairCadVeic.setOnAction((ActionEvent event) -> {
FrmCadVeicApp.getStage().close();
});
}
private void limpaTxt() {
txtAno.setText("");
txtCor.setText("");
txtCpfDono.setText("");
txtKm.setText("");
txtMarca.setText("");
txtModelo.setText("");
txtPlaca.setText("");
txtNomeDono.setText("");
}
public static Stage getStage() {
return stage;
}
public static void setStage(Stage stage) {
FrmCadVeiculo.stage = stage;
}
private void informationDialog(String titulo,String header,String content) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle(titulo);
alert.setHeaderText(header);
alert.setContentText(content);
alert.showAndWait();
}
private void warningDialog(String titulo,String header,String content) {
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle(titulo);
alert.setHeaderText(header);
alert.setContentText(content);
alert.showAndWait();
}
private void atualizaTableView() {
try {
FrmListVeicApp.getStage().close();
new FrmListVeicApp().start(new Stage());
} catch (Exception ex) {
Logger.getLogger(FrmCadVeiculo.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
FrmEditApp
classe que chama o xml com a tela para editar
public class FrmEditVeicApp extends Application {
public static Stage stage;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FrmEditVeic.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
FrmEditVeicApp.stage = stage;
}
public static void main(String[] args) {
launch(args);
}
public static Stage getStage() {
return stage;
}
public static void setStage(Stage stage) {
FrmEditVeicApp.stage = stage;
}
}
FrmEditVeicCtrl
essa classe é a controller , o meu problema está em entender isso aqui
como popular as textfields com os dados vindos do controller de listagem
public class FrmEditVeicCtrl implements Initializable {
@FXML
private AnchorPane anchorEditVeic;
@FXML
private Pane paneEditVeic;
@FXML
private Label lblEditProp;
@FXML
private TextField txtEditNomeDono;
@FXML
private TextField txtEditCpfDono;
@FXML
private Label lblEditMod;
@FXML
private TextField txtEditModelo;
@FXML
private Label lblEditMarc;
@FXML
private TextField txtEditMarca;
@FXML
private Label lblEditCpf;
@FXML
private Label lblEditUf;
@FXML
private Label lblEditPlaca;
@FXML
private TextField txtEditPlaca;
@FXML
private TextField txtEditUfVeic;
@FXML
private Label lblEditAno;
@FXML
private TextField txtEditAno;
@FXML
private Label lblEditCor;
@FXML
private TextField txtEditCor;
@FXML
private Label lblEditKm;
@FXML
private TextField txtEditKm;
@FXML
private Button btnEditVeic;
@FXML
private Button btnSairEditVeic;
private VeiculoController controller;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
btnEditVeic.setOnAction((ActionEvent event) -> {
try {
//popular textfield com dado vindo do controller de listagem
JOptionPane.showConfirmDialog(null, "Deseja realmente editar o veiculo?");
FrmEditVeicApp.getStage().close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao editar");
}
});
btnSairEditVeic.setOnAction((ActionEvent event) -> {
FrmEditVeicApp.getStage().close();
});
}
public void editar(Veiculo veiculo) {
controller = new VeiculoController();
controller.editar(veiculo);
}
}