Made the drawing for circular lists.

This commit is contained in:
Chris Cromer 2016-06-26 23:34:33 -04:00
parent 308c9b0fd9
commit 108eedaff2
5 changed files with 83 additions and 12 deletions

View File

@ -15,6 +15,7 @@
</properties> </properties>
<properties id="javafx-properties"> <properties id="javafx-properties">
<options> <options>
<option name="alias" value="" />
<option name="appClass" value="cl.cromer.estructuras.Main" /> <option name="appClass" value="cl.cromer.estructuras.Main" />
<option name="customManifestAttributes"> <option name="customManifestAttributes">
<list> <list>
@ -29,8 +30,10 @@
</list> </list>
</option> </option>
<option name="description" value="" /> <option name="description" value="" />
<option name="enabledSigning" value="true" />
<option name="height" value="768" /> <option name="height" value="768" />
<option name="htmlParamFile" value="" /> <option name="htmlParamFile" value="" />
<option name="keystore" value="" />
<option name="nativeBundle" value="all" /> <option name="nativeBundle" value="all" />
<option name="paramFile" value="" /> <option name="paramFile" value="" />
<option name="title" value="Estructuras de Datos" /> <option name="title" value="Estructuras de Datos" />

View File

@ -3,7 +3,11 @@ package cl.cromer.estructuras;
import javafx.animation.Animation; import javafx.animation.Animation;
import javafx.animation.PauseTransition; import javafx.animation.PauseTransition;
import javafx.animation.SequentialTransition; import javafx.animation.SequentialTransition;
import javafx.geometry.Pos;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.shape.Circle; import javafx.scene.shape.Circle;
@ -102,7 +106,7 @@ public class Grafico {
} }
/** /**
* Crear una linea vertical * Crear una linea vertical.
* @return StackPane: Devolver el stackpane que contiene la linea vertical. * @return StackPane: Devolver el stackpane que contiene la linea vertical.
*/ */
public static StackPane crearLineaVertical() { public static StackPane crearLineaVertical() {
@ -117,6 +121,45 @@ public class Grafico {
return stackPane; return stackPane;
} }
/**
* Crear la linea circular con flecha.
* @param cajas int: La cantidad de cajas que están.
* @return StackPane: Devolver el stackpane que contiene la linea horizontal.
*/
public static Pane crearLineaCircular(int cajas) {
int height = (cajas - 1) * (40 + 20 + 10);
height = height + 20 + 10;
Line top = new Line();
top.setStartY(20);
top.setEndY(20);
top.setStartX(0);
top.setEndX(20);
Polygon flechaDerecha = new Polygon();
flechaDerecha.getPoints().addAll(
10.0, 15.0,
20.0, 20.0,
10.0, 25.0
);
Line vertical = new Line();
vertical.setStartY(20);
vertical.setEndY(height);
Line bottom = new Line();
bottom.setStartY(height);
bottom.setEndY(height);
bottom.setStartX(0);
bottom.setEndX(20);
Pane stackPane = new Pane();
stackPane.getChildren().addAll(top, flechaDerecha, vertical, bottom);
return stackPane;
}
/** /**
* Crear un rectangulo con texto adentro. * Crear un rectangulo con texto adentro.
* @param colores Colores: Los colores para dar color al rectangulo. * @param colores Colores: Los colores para dar color al rectangulo.

View File

@ -3,6 +3,7 @@ package cl.cromer.estructuras;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.ButtonBar; import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
@ -29,6 +30,11 @@ public class ListaEnlazdaController implements Initializable {
*/ */
@FXML private VBox contenidoLista; @FXML private VBox contenidoLista;
/**
* Donde poner el contenido de lista circular.
*/
@FXML private VBox contenidoListaCircular;
/** /**
* Donde va el codigo a mostrar a la pantalla. * Donde va el codigo a mostrar a la pantalla.
*/ */
@ -331,19 +337,20 @@ public class ListaEnlazdaController implements Initializable {
grafico.removerDestacar(); grafico.removerDestacar();
colores = new Colores(); colores = new Colores();
contenidoLista.getChildren().clear(); contenidoLista.getChildren().clear();
contenidoListaCircular.getChildren().clear();
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) { if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
for (int i = 0; i < listaEnlazada.size(); i++) { for (int i = 0; i < listaEnlazada.size(); i++) {
Enlace enlace = listaEnlazada.getIndice(i); Enlace enlace = listaEnlazada.getIndice(i);
if (listaEnlazada.getTipo() == ListaEnlazadaTipos.SIMPLE) { if (listaEnlazada.getTipo() == ListaEnlazadaTipos.SIMPLE) {
dibujarSimple(enlace); dibujarSimple(enlace, false);
} }
else if (listaEnlazada.getTipo() == ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA) { else if (listaEnlazada.getTipo() == ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA) {
if (i != listaEnlazada.size() - 1) { if (i != listaEnlazada.size() - 1) {
dibujarDoble(enlace); dibujarDoble(enlace, (i == 0));
} }
else { else {
dibujarSimple(enlace); dibujarSimple(enlace, false);
} }
} }
colores.siguinteColor(); colores.siguinteColor();
@ -352,9 +359,12 @@ public class ListaEnlazdaController implements Initializable {
else { else {
for (int i = 0; i < listaEnlazadaCircular.size(); i++) { for (int i = 0; i < listaEnlazadaCircular.size(); i++) {
Enlace enlace = listaEnlazadaCircular.getIndice(i); Enlace enlace = listaEnlazadaCircular.getIndice(i);
dibujarSimple(enlace); dibujarSimple(enlace, (i == listaEnlazadaCircular.size() - 1));
colores.siguinteColor(); colores.siguinteColor();
} }
if (listaEnlazadaCircular.size() > 0) {
contenidoListaCircular.getChildren().addAll(Grafico.crearLineaCircular(listaEnlazadaCircular.size()));
}
} }
} }
@ -362,19 +372,29 @@ public class ListaEnlazdaController implements Initializable {
* Dibujarlo con una flecha. * Dibujarlo con una flecha.
* @param enlace Object: El enlace que tiene la llave y valor. * @param enlace Object: El enlace que tiene la llave y valor.
*/ */
private void dibujarSimple(Enlace enlace) { private void dibujarSimple(Enlace enlace, boolean sinFlecha) {
contenidoLista.getChildren().addAll( contenidoLista.getChildren().addAll(
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())), Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave()))
Grafico.crearLineaVertical(),
Grafico.crearFlechaAbajo()
); );
if (!sinFlecha) {
contenidoLista.getChildren().addAll(
Grafico.crearLineaVertical(),
Grafico.crearFlechaAbajo()
);
}
} }
/** /**
* Dibujarlo con dos flechas. * Dibujarlo con dos flechas.
* @param enlace El enlace que tiene la llave y valor. * @param enlace El enlace que tiene la llave y valor.
*/ */
private void dibujarDoble(Enlace enlace) { private void dibujarDoble(Enlace enlace, boolean primer) {
if (primer) {
contenidoLista.getChildren().addAll(
Grafico.crearFlechaArriba(),
Grafico.crearLineaVertical()
);
}
contenidoLista.getChildren().addAll( contenidoLista.getChildren().addAll(
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())), Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
Grafico.crearFlechaArriba(), Grafico.crearFlechaArriba(),

View File

@ -16,6 +16,8 @@ import java.util.Optional;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.logging.Level; import java.util.logging.Level;
import static cl.cromer.estructuras.ListaEnlazadaTipos.SIMPLE;
/** /**
* Controlar las acciones cuando una opción es elegido en el menu. * Controlar las acciones cuando una opción es elegido en el menu.
*/ */
@ -145,7 +147,7 @@ public class MenuController extends VBox implements Initializable {
*/ */
@FXML @FXML
protected void menuListaEnlazadaSimple() { protected void menuListaEnlazadaSimple() {
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.SIMPLE); ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(SIMPLE);
loadStage( loadStage(
resourceBundle.getString("tituloListaEnlazadaSimple"), resourceBundle.getString("tituloListaEnlazadaSimple"),
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml", "/cl/cromer/estructuras/fxml/listaEnlazada.fxml",

View File

@ -20,7 +20,10 @@
<Button text="%buscar" onAction="#botonBuscar" /> <Button text="%buscar" onAction="#botonBuscar" />
<TextFieldLimited fx:id="valorLista" maxLength="2" prefWidth="40" /> <TextFieldLimited fx:id="valorLista" maxLength="2" prefWidth="40" />
</HBox> </HBox>
<VBox fx:id="contenidoLista" alignment="CENTER" /> <HBox alignment="TOP_CENTER" VBox.vgrow="ALWAYS" spacing="0">
<VBox fx:id="contenidoListaCircular" alignment="TOP_LEFT" />
<VBox fx:id="contenidoLista" alignment="TOP_CENTER" />
</HBox>
</VBox> </VBox>
<StackPane alignment="TOP_LEFT" minWidth="450"> <StackPane alignment="TOP_LEFT" minWidth="450">
<Text fx:id="codigoLista" /> <Text fx:id="codigoLista" />