From 72d95456aea450b6332075576805c846f858d71e Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Tue, 4 Jul 2017 16:32:21 -0400 Subject: [PATCH] Choose final transiciones --- src/cl/cromer/mt/Automata.java | 2 +- src/cl/cromer/mt/EstadosFinales.java | 16 +++++++++--- .../cromer/mt/EstadosFinalesController.java | 25 ++++++++++++++++--- src/cl/cromer/mt/LoteController.java | 5 ++-- src/cl/cromer/mt/MenuController.java | 8 ++++-- 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/cl/cromer/mt/Automata.java b/src/cl/cromer/mt/Automata.java index 8bf100c..da412da 100644 --- a/src/cl/cromer/mt/Automata.java +++ b/src/cl/cromer/mt/Automata.java @@ -51,7 +51,7 @@ class Automata { System.exit(1); } } - estados_existentes = new ArrayList(); + estados_existentes = new ArrayList<>(); for(int i=0 ; i < getEstados().size() ; i++){ if(getEstados().get(i) != null) estados_existentes.add(getEstados().get(i).getQ()); } diff --git a/src/cl/cromer/mt/EstadosFinales.java b/src/cl/cromer/mt/EstadosFinales.java index fb7e96f..2148f1f 100644 --- a/src/cl/cromer/mt/EstadosFinales.java +++ b/src/cl/cromer/mt/EstadosFinales.java @@ -11,11 +11,13 @@ import java.util.ArrayList; public class EstadosFinales { private ArrayList estadosExistents; - private ArrayList estadosElegidos; - public EstadosFinales(ArrayList estadosExistents) { - this.estadosExistents = estadosExistents; + private Maquina maquina; + + public EstadosFinales(Maquina maquina) { + this.maquina = maquina; + this.estadosExistents = maquina.getMaquina().getEstados_existentes(); } public ArrayList getEstadosExistents() { @@ -33,4 +35,12 @@ public class EstadosFinales { public void setEstadosElegidos(ArrayList estadosElegidos) { this.estadosElegidos = estadosElegidos; } + + public Maquina getMaquina() { + return maquina; + } + + public void setMaquina(Maquina maquina) { + this.maquina = maquina; + } } diff --git a/src/cl/cromer/mt/EstadosFinalesController.java b/src/cl/cromer/mt/EstadosFinalesController.java index 31c54e8..47dc7fd 100644 --- a/src/cl/cromer/mt/EstadosFinalesController.java +++ b/src/cl/cromer/mt/EstadosFinalesController.java @@ -14,6 +14,8 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import java.util.ArrayList; + /** * Controlar las acciones cuando el usuario elige los estados finales */ @@ -21,10 +23,26 @@ public class EstadosFinalesController { @FXML private VBox contenido; + private EstadosFinales estadosFinales; + @FXML public void elegir() { - Stage stage = (Stage) contenido.getScene().getWindow(); - stage.close(); + ArrayList elegidos = new ArrayList<>(); + for (int i = 0; i < estadosFinales.getEstadosExistents().size(); i++) { + CheckBox checkBox = (CheckBox) contenido.getScene().lookup("#q" + estadosFinales.getEstadosExistents().get(i)); + if (checkBox.isSelected()) { + elegidos.add(i); + } + } + + if (elegidos.size() > 0) { + estadosFinales.setEstadosElegidos(elegidos); + Stage stage = (Stage) contenido.getScene().getWindow(); + stage.close(); + } + else { + MT.mostrarMensaje("Elegir", "Usted tiene que elegir uno o mas estados finales!"); + } } /** @@ -32,7 +50,7 @@ public class EstadosFinalesController { */ public void handleWindowShownEvent() { Stage stage = (Stage) contenido.getScene().getWindow(); - EstadosFinales estadosFinales = (EstadosFinales) stage.getScene().getUserData(); + estadosFinales = (EstadosFinales) stage.getScene().getUserData(); for (int i = 0; i < estadosFinales.getEstadosExistents().size(); i++) { HBox hBox = new HBox(); @@ -42,6 +60,7 @@ public class EstadosFinalesController { hBox.prefWidthProperty().bind(contenido.widthProperty()); hBox.prefHeightProperty().bind(contenido.heightProperty()); CheckBox checkBox = new CheckBox("q" + estadosFinales.getEstadosExistents().get(i)); + checkBox.setId("q" + estadosFinales.getEstadosExistents().get(i)); hBox.getChildren().add(checkBox); contenido.getChildren().add(hBox); } diff --git a/src/cl/cromer/mt/LoteController.java b/src/cl/cromer/mt/LoteController.java index ab9f8a2..48e5af9 100644 --- a/src/cl/cromer/mt/LoteController.java +++ b/src/cl/cromer/mt/LoteController.java @@ -35,9 +35,10 @@ public class LoteController extends VBox { @FXML protected void runLote() throws Exception { Scene scene = vboxLote.getScene(); - Maquina maquina = (Maquina) scene.getUserData(); + EstadosFinales estadosFinales = (EstadosFinales) scene.getUserData(); + Maquina maquina = estadosFinales.getMaquina(); for (TablaData fila : tablaData) { - boolean exito = maquina.comprobarCadena(new StringBuilder(fila.getPrimer()), new int[] {5}); + boolean exito = maquina.comprobarCadena(new StringBuilder(fila.getPrimer()), estadosFinales.getEstadosElegidos().stream().mapToInt(i -> i).toArray()); if (exito) { fila.setSegundo("Aceptada"); } diff --git a/src/cl/cromer/mt/MenuController.java b/src/cl/cromer/mt/MenuController.java index c2b1884..b1123a5 100644 --- a/src/cl/cromer/mt/MenuController.java +++ b/src/cl/cromer/mt/MenuController.java @@ -36,7 +36,10 @@ import java.util.regex.Pattern; * Controlar las acciones cuando una opciĆ³n es elegido en el menu. */ public class MenuController { + protected EstadosFinales estadosFinales; + private Maquina maquina = null; + private TableView tableView; @FXML @@ -109,7 +112,8 @@ public class MenuController { FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(getClass().getResource("estadosFinales.fxml")); Scene nuevaScene = new Scene(fxmlLoader.load(), 250, 250); - nuevaScene.setUserData(new EstadosFinales(maquina.getMaquina().getEstados_existentes())); + estadosFinales = new EstadosFinales(maquina); + nuevaScene.setUserData(estadosFinales); nuevaScene.getStylesheets().add("/cl/cromer/mt/mt.css"); Stage stage = new Stage(); stage.initModality(Modality.WINDOW_MODAL); @@ -158,7 +162,7 @@ public class MenuController { FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(getClass().getResource("lote.fxml")); Scene scene = new Scene(fxmlLoader.load(), 640, 480); - scene.setUserData(maquina); + scene.setUserData(estadosFinales); scene.getStylesheets().add("/cl/cromer/mt/mt.css"); Stage stage = new Stage(); stage.initModality(Modality.WINDOW_MODAL);