Estructuras_de_Datos/src/cl/cromer/estructuras/TablaHashController.java

273 lines
7.2 KiB
Java

package cl.cromer.estructuras;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
* Esta clase es para controlar todos la interfaz de TablaHash.
*
* @author Chris Cromer
*/
public class TablaHashController implements Initializable {
/**
* La caja para ingresar la llave.
*/
@FXML
private TextFieldLimited llaveHashTable;
/**
* La caja para ingresar el valor.
*/
@FXML
private TextFieldLimited valorHashTable;
/**
* Donde poner el contenido de tablaHash.
*/
@FXML
private VBox contenidoHashTable;
/**
* Donde va el codigo a mostrar a la pantalla.
*/
@FXML
private Text codigoHashTable;
/**
* La escena donde está cosas graficas.
*/
private Scene scene;
/**
* Donde está guardado los idiomas.
*/
private ResourceBundle resourceBundle;
/**
* El tablaHash usado en la aplicación.
*/
private TablaHash tablaHash;
/**
* Grafico rectangulos.
*/
private Grafico grafico;
/**
* Inicializar todos los datos y dibujar las graficas.
*
* @param location URL: El URL de fxml en uso.
* @param resourceBundle ResourceBundle: Tiene datos de idioma.
*/
@Override
public void initialize(URL location, ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle;
scene = null;
Colores colores = new Colores();
for (int i = 0; i < 10; i++) {
contenidoHashTable.getChildren().addAll(Grafico.crearHashCajas(colores, String.valueOf(i)));
colores.siguinteColor();
}
}
/**
* Llenar el tablaHash con numeros al azar.
*/
@FXML
protected void botonLlenar() {
if (scene == null) {
initializeHashTable();
}
Palabras palabras = new Palabras();
Random random = new Random();
int maximo = 99;
int minimo = 0;
int rango = maximo - minimo + 1;
for (int i = 0; i < 10; i++) {
int numero = random.nextInt(rango) + minimo;
while (! tablaHash.insertar(palabras.getPalabra(), numero)) {
if (tablaHash.size() == 10) {
break;
}
}
}
generarGrafico();
}
/**
* Vaciar el tablaHash de todos los valores.
*/
@FXML
protected void botonVaciar() {
if (scene == null) {
initializeHashTable();
}
tablaHash = new TablaHash(10);
generarGrafico();
}
/**
* Insertar un valor al tablaHash y mostrar el codigo en la pantalla.
*/
@FXML
protected void botonInsertar() {
if (scene == null) {
initializeHashTable();
}
// Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/tablaHash/insertar")).useDelimiter("\\Z").next();
codigoHashTable.setText(codigoTexto);
if (llaveHashTable.getText() != null && ! llaveHashTable.getText().trim().equals("") && valorHashTable.getText() != null && ! valorHashTable.getText().trim().equals("")) {
try {
boolean exito = tablaHash.insertar(llaveHashTable.getText().trim(), Integer.valueOf(valorHashTable.getText()));
if (exito) {
llaveHashTable.setText("");
valorHashTable.setText("");
generarGrafico();
}
else {
if (tablaHash.size() == 10) {
Main.mostrarError(resourceBundle.getString("tablaHashLleno"), resourceBundle);
}
else {
Main.mostrarError(resourceBundle.getString("tablaHashLlaveExiste"), resourceBundle);
}
}
}
catch (NumberFormatException exception) {
// El error no es fatal, sigue
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
}
}
else {
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
}
}
/**
* Eliminar un valor del tablaHash si existe y mostrar el codigo en la pantalla.
*/
@FXML
protected void botonEliminar() {
if (scene == null) {
initializeHashTable();
}
// Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/tablaHash/eliminar")).useDelimiter("\\Z").next();
codigoHashTable.setText(codigoTexto);
try {
if (llaveHashTable.getText() != null && ! llaveHashTable.getText().trim().equals("")) {
boolean exito = tablaHash.eliminar(llaveHashTable.getText());
if (exito) {
llaveHashTable.setText("");
valorHashTable.setText("");
generarGrafico();
}
else {
Main.mostrarError(resourceBundle.getString("tablaHashNoEsta"), resourceBundle);
}
}
else {
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
}
}
catch (NumberFormatException exception) {
// El error no es fatal, sigue
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
}
}
/**
* Buscar si existe un elemento en el tablaHash y mostrar el codigo en la pantalla
* Si existe el valor destacarlo.
*/
@FXML
protected void botonBuscar() {
if (scene == null) {
initializeHashTable();
}
// Mostrar el codigo
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/tablaHash/buscar")).useDelimiter("\\Z").next();
codigoHashTable.setText(codigoTexto);
try {
if (llaveHashTable.getText() != null && ! llaveHashTable.getText().trim().equals("")) {
HashItem hashItem = tablaHash.buscar(llaveHashTable.getText());
if (hashItem != null) {
generarGrafico();
grafico = new Grafico(scene);
grafico.destacar("#indice_caja_" + hashItem.getIndice(), Grafico.RECTANGULO);
grafico.destacar("#indice_texto_" + hashItem.getIndice(), Grafico.TEXTO);
grafico.destacar("#llave_caja_" + hashItem.getIndice(), Grafico.RECTANGULO);
grafico.destacar("#llave_texto_" + hashItem.getIndice(), Grafico.TEXTO);
grafico.destacar("#valor_caja_" + hashItem.getIndice(), Grafico.RECTANGULO);
grafico.destacar("#valor_texto_" + hashItem.getIndice(), Grafico.TEXTO);
}
else {
Main.mostrarError(resourceBundle.getString("tablaHashNoEsta"), resourceBundle);
}
}
else {
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
}
}
catch (NumberFormatException exception) {
// El error no es fatal, sigue
Main.mostrarError(resourceBundle.getString("tablaHashNoLlave"), resourceBundle);
}
}
/**
* Crear el tablaHash de tamaño 10.
*/
private void initializeHashTable() {
scene = contenidoHashTable.getScene();
grafico = new Grafico(scene);
this.tablaHash = new TablaHash(10);
}
/**
* Poner los valores en el grafico.
*/
private void generarGrafico() {
grafico.removerDestacar();
for (int i = 0; i < 10; i++) {
if (tablaHash.getIndice(i) != null) {
Text text = (Text) scene.lookup("#indice_texto_" + String.valueOf(i));
text.setText(String.valueOf(i));
text = (Text) scene.lookup("#llave_texto_" + String.valueOf(i));
text.setText(tablaHash.getIndice(i).getLlave());
text = (Text) scene.lookup("#valor_texto_" + String.valueOf(i));
text.setText(String.valueOf(tablaHash.getIndice(i).getValor()));
}
else {
Text text = (Text) scene.lookup("#indice_texto_" + String.valueOf(i));
text.setText("");
text = (Text) scene.lookup("#llave_texto_" + String.valueOf(i));
text.setText("");
text = (Text) scene.lookup("#valor_texto_" + String.valueOf(i));
text.setText("");
}
}
}
}