/** Insertar un nodo en el grafoNoDirigido. */ @FXML protected void botonInsertar() { if (scene == null) { initializeGrafo(); } // Mostrar el codigo String tipo = getTipoString(); String codigoTexto = new Scanner( getClass() .getResourceAsStream( "/cl/cromer/estructuras/code/grafo" + tipo + "/insertarNodo")) .useDelimiter("\\Z") .next(); codigoGrafo.setText(codigoTexto); if (valorGrafo.getText() != null && !valorGrafo.getText().trim().equals("")) { try { int i; for (i = 0; i < 5; i++) { if (grafoNodos[i] == null) { grafoNodos[i] = new GrafoNodo(Integer.valueOf(valorGrafo.getText())); break; } else if (grafoNodos[i].getValue() == Integer.valueOf(valorGrafo.getText())) { Main.mostrarError(resourceBundle.getString("grafoNodoExiste"), resourceBundle); i = -1; break; } } if (i == 5) { // Maximo 5 nodos Main.mostrarError(resourceBundle.getString("grafoLleno"), resourceBundle); } else if (i != -1) { boolean exito; if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) { exito = noDirigido.addNode(grafoNodos[i]); } else { Grafo.Vertex<GrafoNodo> vertex = new Grafo.Vertex<>(String.valueOf(grafoNodos[i].getValue())); vertex.setData(grafoNodos[i]); exito = dirigido.addVertex(vertex); } if (exito) { valorGrafo.setText(""); generarGrafico(); } else { Main.mostrarError(resourceBundle.getString("grafoNodoExiste"), resourceBundle); } } } catch (NumberFormatException exception) { // El error no es fatal, sigue Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } } else { Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } }
/** Eliminar un edge del grafoNoDirigido y mostrar el codigo en la pantalla. */ @FXML protected void botonEliminarEdge() { if (scene == null) { initializeGrafo(); } String tipo = getTipoString(); String codigoTexto = new Scanner( getClass() .getResourceAsStream( "/cl/cromer/estructuras/code/grafo" + tipo + "/eliminarEdge")) .useDelimiter("\\Z") .next(); codigoGrafo.setText(codigoTexto); if (valorNodo1.getText() != null && !valorNodo1.getText().trim().equals("") && valorNodo2.getText() != null && !valorNodo2.getText().trim().equals("")) { GrafoNodo[] nodos = getNodosEdge(); if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) { if (nodos[0] == null || nodos[1] == null || !noDirigido.nodeExists(nodos[0]) || !noDirigido.nodeExists(nodos[1])) { Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle); } else if (!noDirigido.edgeExists(nodos[0], nodos[1])) { Main.mostrarError(resourceBundle.getString("grafoNoEdge"), resourceBundle); } else { noDirigido.removeEdge(nodos[0], nodos[1]); } } else { if (nodos[0] == null || nodos[1] == null || dirigido.findVertexByName(String.valueOf(nodos[0].getValue())) == null || dirigido.findVertexByName(String.valueOf(nodos[1].getValue())) == null) { Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle); } else if (!edgeExists(nodos[0], nodos[1])) { Main.mostrarError(resourceBundle.getString("grafoNoEdge"), resourceBundle); } else { dirigido.removeEdge( dirigido.findVertexByName(String.valueOf(nodos[0].getValue())), dirigido.findVertexByName(String.valueOf(nodos[1].getValue()))); } } valorNodo1.setText(""); valorNodo2.setText(""); if (grafoTipos.getTipo() == Grafo.Tipos.PESO) { valorPeso.setText(""); } } else { Main.mostrarError(resourceBundle.getString("grafoNoEdge"), resourceBundle); } generarGrafico(); }
/** Eliminar un nodo del grafoNoDirigido. */ @FXML protected void botonEliminar() { if (scene == null) { initializeGrafo(); } // Mostrar el codigo String tipo = getTipoString(); String codigoTexto = new Scanner( getClass() .getResourceAsStream( "/cl/cromer/estructuras/code/grafo" + tipo + "/eliminarNodo")) .useDelimiter("\\Z") .next(); codigoGrafo.setText(codigoTexto); if (valorGrafo.getText() != null && !valorGrafo.getText().trim().equals("")) { try { int i; for (i = 0; i < 5; i++) { if (grafoNodos[i] != null && grafoNodos[i].getValue() == Integer.valueOf(valorGrafo.getText())) { break; } } if (i != 5) { boolean exito = false; if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) { exito = noDirigido.removeNode(grafoNodos[i]); } else { for (int j = 0; j < dirigido.size(); j++) { Grafo.Vertex<GrafoNodo> vertex = dirigido.getVertex(j); if (vertex.getData().getValue() == Integer.valueOf(valorGrafo.getText())) { exito = dirigido.removeVertex(vertex); break; } } } if (exito) { grafoNodos[i] = null; valorGrafo.setText(""); generarGrafico(); } else { Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle); } } else { Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle); } } catch (NumberFormatException exception) { // El error no es fatal, sigue Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } } else { Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } }
/** Insertar un edge al grafoNoDirigido y mostrar el codigo en la pantalla. */ @FXML protected void botonInsertarEdge() { if (scene == null) { initializeGrafo(); } String tipo = getTipoString(); String codigoTexto = new Scanner( getClass() .getResourceAsStream( "/cl/cromer/estructuras/code/grafo" + tipo + "/insertarEdge")) .useDelimiter("\\Z") .next(); codigoGrafo.setText(codigoTexto); if (valorNodo1.getText() != null && !valorNodo1.getText().trim().equals("") && valorNodo2.getText() != null && !valorNodo2.getText().trim().equals("")) { GrafoNodo[] nodos = getNodosEdge(); if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) { if (nodos[0] == null || nodos[1] == null || !noDirigido.nodeExists(nodos[0]) || !noDirigido.nodeExists(nodos[1])) { Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle); } else if (noDirigido.edgeExists(nodos[0], nodos[1])) { Main.mostrarError(resourceBundle.getString("grafoEdgeExiste"), resourceBundle); } else { noDirigido.addEdge(nodos[0], nodos[1]); } } else { if (nodos[0] == null || nodos[1] == null || dirigido.findVertexByName(String.valueOf(nodos[0].getValue())) == null || dirigido.findVertexByName(String.valueOf(nodos[1].getValue())) == null) { Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle); } else if (edgeExists(nodos[0], nodos[1])) { Main.mostrarError(resourceBundle.getString("grafoEdgeExiste"), resourceBundle); } else { int peso = PESO_PREDETERMINADO; if (grafoTipos.getTipo() == Grafo.Tipos.PESO && valorPeso.getText() != null && !valorPeso.getText().trim().equals("")) { try { peso = Integer.valueOf(valorPeso.getText()); } catch (NumberFormatException exception) { peso = PESO_PREDETERMINADO; } } dirigido.addEdge( dirigido.findVertexByName(String.valueOf(nodos[0].getValue())), dirigido.findVertexByName(String.valueOf(nodos[1].getValue())), peso); } } valorNodo1.setText(""); valorNodo2.setText(""); if (grafoTipos.getTipo() == Grafo.Tipos.PESO) { valorPeso.setText(""); } } else { Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } generarGrafico(); }