Made the drawing for circular lists.
This commit is contained in:
parent
308c9b0fd9
commit
108eedaff2
@ -15,6 +15,7 @@
|
||||
</properties>
|
||||
<properties id="javafx-properties">
|
||||
<options>
|
||||
<option name="alias" value="" />
|
||||
<option name="appClass" value="cl.cromer.estructuras.Main" />
|
||||
<option name="customManifestAttributes">
|
||||
<list>
|
||||
@ -29,8 +30,10 @@
|
||||
</list>
|
||||
</option>
|
||||
<option name="description" value="" />
|
||||
<option name="enabledSigning" value="true" />
|
||||
<option name="height" value="768" />
|
||||
<option name="htmlParamFile" value="" />
|
||||
<option name="keystore" value="" />
|
||||
<option name="nativeBundle" value="all" />
|
||||
<option name="paramFile" value="" />
|
||||
<option name="title" value="Estructuras de Datos" />
|
||||
|
@ -3,7 +3,11 @@ package cl.cromer.estructuras;
|
||||
import javafx.animation.Animation;
|
||||
import javafx.animation.PauseTransition;
|
||||
import javafx.animation.SequentialTransition;
|
||||
import javafx.geometry.Pos;
|
||||
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.paint.Color;
|
||||
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.
|
||||
*/
|
||||
public static StackPane crearLineaVertical() {
|
||||
@ -117,6 +121,45 @@ public class Grafico {
|
||||
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.
|
||||
* @param colores Colores: Los colores para dar color al rectangulo.
|
||||
|
@ -3,6 +3,7 @@ package cl.cromer.estructuras;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.canvas.Canvas;
|
||||
import javafx.scene.control.ButtonBar;
|
||||
import javafx.scene.control.ButtonType;
|
||||
import javafx.scene.control.Dialog;
|
||||
@ -29,6 +30,11 @@ public class ListaEnlazdaController implements Initializable {
|
||||
*/
|
||||
@FXML private VBox contenidoLista;
|
||||
|
||||
/**
|
||||
* Donde poner el contenido de lista circular.
|
||||
*/
|
||||
@FXML private VBox contenidoListaCircular;
|
||||
|
||||
/**
|
||||
* Donde va el codigo a mostrar a la pantalla.
|
||||
*/
|
||||
@ -331,19 +337,20 @@ public class ListaEnlazdaController implements Initializable {
|
||||
grafico.removerDestacar();
|
||||
colores = new Colores();
|
||||
contenidoLista.getChildren().clear();
|
||||
contenidoListaCircular.getChildren().clear();
|
||||
|
||||
if (listaEnlazadaTipos.getTipo() != ListaEnlazadaTipos.CIRCULAR) {
|
||||
for (int i = 0; i < listaEnlazada.size(); i++) {
|
||||
Enlace enlace = listaEnlazada.getIndice(i);
|
||||
if (listaEnlazada.getTipo() == ListaEnlazadaTipos.SIMPLE) {
|
||||
dibujarSimple(enlace);
|
||||
dibujarSimple(enlace, false);
|
||||
}
|
||||
else if (listaEnlazada.getTipo() == ListaEnlazadaTipos.DOBLEMENTE_ENLAZADA) {
|
||||
if (i != listaEnlazada.size() - 1) {
|
||||
dibujarDoble(enlace);
|
||||
dibujarDoble(enlace, (i == 0));
|
||||
}
|
||||
else {
|
||||
dibujarSimple(enlace);
|
||||
dibujarSimple(enlace, false);
|
||||
}
|
||||
}
|
||||
colores.siguinteColor();
|
||||
@ -352,9 +359,12 @@ public class ListaEnlazdaController implements Initializable {
|
||||
else {
|
||||
for (int i = 0; i < listaEnlazadaCircular.size(); i++) {
|
||||
Enlace enlace = listaEnlazadaCircular.getIndice(i);
|
||||
dibujarSimple(enlace);
|
||||
dibujarSimple(enlace, (i == listaEnlazadaCircular.size() - 1));
|
||||
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.
|
||||
* @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(
|
||||
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave()))
|
||||
);
|
||||
if (!sinFlecha) {
|
||||
contenidoLista.getChildren().addAll(
|
||||
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
|
||||
Grafico.crearLineaVertical(),
|
||||
Grafico.crearFlechaAbajo()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dibujarlo con dos flechas.
|
||||
* @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(
|
||||
Grafico.crearCaja(colores, String.valueOf(enlace.getLlave()), String.valueOf(enlace.getLlave())),
|
||||
Grafico.crearFlechaArriba(),
|
||||
|
@ -16,6 +16,8 @@ import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import static cl.cromer.estructuras.ListaEnlazadaTipos.SIMPLE;
|
||||
|
||||
/**
|
||||
* Controlar las acciones cuando una opción es elegido en el menu.
|
||||
*/
|
||||
@ -145,7 +147,7 @@ public class MenuController extends VBox implements Initializable {
|
||||
*/
|
||||
@FXML
|
||||
protected void menuListaEnlazadaSimple() {
|
||||
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(ListaEnlazadaTipos.SIMPLE);
|
||||
ListaEnlazadaTipos listaEnlazadaTipos = new ListaEnlazadaTipos(SIMPLE);
|
||||
loadStage(
|
||||
resourceBundle.getString("tituloListaEnlazadaSimple"),
|
||||
"/cl/cromer/estructuras/fxml/listaEnlazada.fxml",
|
||||
|
@ -20,7 +20,10 @@
|
||||
<Button text="%buscar" onAction="#botonBuscar" />
|
||||
<TextFieldLimited fx:id="valorLista" maxLength="2" prefWidth="40" />
|
||||
</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>
|
||||
<StackPane alignment="TOP_LEFT" minWidth="450">
|
||||
<Text fx:id="codigoLista" />
|
||||
|
Loading…
Reference in New Issue
Block a user