Hola a todos, hoy os dejo una serie de ejercicios propuestos y resueltos JavaFX.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución. Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Te recomiendo que uses mensajes de trazas, donde te sean necesarios. Si tienes problemas también puedes usar el depurador.
Aquí tienes todos los posts relacionados con Java:
1) Crea con JavaFX la siguiente pantalla.
Cuando el usuario escriba números (controlarlo con excepciones) y pulse en sumar, debe mostrar en el txtResultado el resultado final.
Puedes descargarlo aquí.
Spoiler Inside | SelectShow> |
---|---|
— Main package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { //Cargo la vista FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/SumaVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) { launch(args); } } — SumaControlador package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TextField; import modelo.Suma; public class SumaControlador implements Initializable { @FXML private Button btnSumar; @FXML private TextField txtOp1; @FXML private TextField txtOp2; @FXML private TextField txtResultado; @Override public void initialize(URL url, ResourceBundle rb) { // TODO } @FXML private void sumar(ActionEvent event) { try { // Obtengo los parametros int op1 = Integer.parseInt(this.txtOp1.getText()); int op2 = Integer.parseInt(this.txtOp2.getText()); // Creo una instancia del modelo Suma s = new Suma(op1, op2); // Realizo la suma int resultado = s.suma(); // Muestro el resultado this.txtResultado.setText(resultado + ""); } catch (NumberFormatException e) { // Alerta de error Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Formato incorrecto"); alert.showAndWait(); } } } — Suma package modelo; public class Suma { private int a; private int b; public Suma(int a, int b) { this.a = a; this.b = b; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } public int suma() { return a + b; } } — SumaVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="290.0" prefWidth="360.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.SumaControlador"> <children> <Button fx:id="btnSumar" layoutX="151.0" layoutY="154.0" mnemonicParsing="false" onAction="#sumar" prefHeight="25.0" prefWidth="150.0" text="Sumar" /> <TextField fx:id="txtOp1" layoutX="152.0" layoutY="62.0" /> <TextField fx:id="txtOp2" layoutX="152.0" layoutY="104.0" /> <TextField fx:id="txtResultado" editable="false" layoutX="152.0" layoutY="202.0" /> <Label layoutX="80.0" layoutY="66.0" text="Operando 1" /> <Label layoutX="80.0" layoutY="108.0" text="Operando 2" /> <Label layoutX="80.0" layoutY="206.0" text="Resultado" /> </children> </AnchorPane> |
2) Crea con JavaFX la siguiente pantalla.
Cuando el usuario escriba números (controlarlo con excepciones) y según que operación elija, deberá hacer la operación y mostrarlo en el txtResultado. Tener en cuenta que la división, debemos controlar que el segundo operando no debe ser 0.
Puedes descargarlo aquí.
Spoiler Inside | SelectShow> |
---|---|
— Main package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { //Cargo la vista FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/OperacionesVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } — Main — OperacionesController package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; import javafx.scene.control.ToggleGroup; import modelo.Operaciones; public class OperacionesController implements Initializable { @FXML private TextField txtOp1; @FXML private TextField txtOp2; @FXML private Button btnOperacion; @FXML private RadioButton rdbSuma; @FXML private RadioButton rdbResta; @FXML private RadioButton rdbMult; @FXML private RadioButton rdbDivision; @FXML private TextField txtResultado; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { ToggleGroup tg = new ToggleGroup(); this.rdbSuma.setToggleGroup(tg); this.rdbResta.setToggleGroup(tg); this.rdbMult.setToggleGroup(tg); this.rdbDivision.setToggleGroup(tg); } @FXML private void hacerOperacion(ActionEvent event) { try { // Obtengo los operadores int op1 = Integer.parseInt(this.txtOp1.getText()); int op2 = Integer.parseInt(this.txtOp2.getText()); // Creo una instancia del modelo Operaciones op = new Operaciones(op1, op2); // Segun el radio seleccionado, hago una u otra operacion if (this.rdbSuma.isSelected()) { this.txtResultado.setText(op.suma() + ""); } else if (this.rdbResta.isSelected()) { this.txtResultado.setText(op.resta() + ""); } else if (this.rdbMult.isSelected()) { this.txtResultado.setText(op.mult() + ""); } else if (this.rdbDivision.isSelected()) { // Si el operando 2 es 0, lanzo error if (op2 == 0) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("El operando 2 no puede ser 0"); alert.showAndWait(); } else { this.txtResultado.setText(op.division() + ""); } } } catch (NumberFormatException e) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Formato incorrecto"); alert.showAndWait(); } } } — Operaciones package modelo; public class Operaciones { private int a; private int b; public Operaciones(int a, int b) { this.a = a; this.b = b; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } public int suma() { return a + b; } public int resta() { return a - b; } public int mult() { return a * b; } public double division() { return (double) a / b; } } — OperacionesVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="361.0" prefWidth="337.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.OperacionesController"> <children> <TextField fx:id="txtOp1" layoutX="133.0" layoutY="74.0" /> <TextField fx:id="txtOp2" layoutX="133.0" layoutY="119.0" /> <Label layoutX="47.0" layoutY="78.0" text="Operando 1" /> <Label layoutX="47.0" layoutY="123.0" text="Operando 2" /> <Button fx:id="btnOperacion" layoutX="133.0" layoutY="166.0" mnemonicParsing="false" onAction="#hacerOperacion" prefHeight="25.0" prefWidth="149.0" text="Operar" /> <RadioButton fx:id="rdbSuma" layoutX="128.0" layoutY="214.0" mnemonicParsing="false" selected="true" text="Suma" /> <RadioButton fx:id="rdbResta" layoutX="129.0" layoutY="246.0" mnemonicParsing="false" text="Resta" /> <RadioButton fx:id="rdbMult" layoutX="191.0" layoutY="246.0" mnemonicParsing="false" text="Multiplicacion" /> <RadioButton fx:id="rdbDivision" layoutX="191.0" layoutY="214.0" mnemonicParsing="false" text="Division" /> <TextField fx:id="txtResultado" editable="false" layoutX="127.0" layoutY="291.0" /> <Label layoutX="47.0" layoutY="295.0" text="Resultado" /> </children> </AnchorPane> |
3) Crea la siguiente pantalla con JavaFX.
Al pulsar en el botón de agregar persona, creara un objeto Persona y lo insertara en la tabla.
Spoiler Inside | SelectShow> |
---|---|
— Main /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { //Cargo la vista FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/PersonaVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } — PersonasController package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import modelo.Persona; public class PersonaController implements Initializable { @FXML private Button btnAgregar; @FXML private TextField txtNombre; @FXML private TextField txtApellidos; @FXML private TextField txtEdad; @FXML private TableView<Persona> tblPersonas; @FXML private TableColumn colNombre; @FXML private TableColumn colApellidos; @FXML private TableColumn colEdad; private ObservableList<Persona> personas; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { // Creo el observablelist personas = FXCollections.observableArrayList(); // Asigno las columnas con los atributos del modelo this.colNombre.setCellValueFactory(new PropertyValueFactory("nombre")); this.colApellidos.setCellValueFactory(new PropertyValueFactory("apellidos")); this.colEdad.setCellValueFactory(new PropertyValueFactory("edad")); } @FXML private void agregarPersona(ActionEvent event) { try { // Obtengo los datos del formulario String nombre = this.txtNombre.getText(); String apellidos = this.txtApellidos.getText(); int edad = Integer.parseInt(this.txtEdad.getText()); // Creo una persona Persona p = new Persona(nombre, apellidos, edad); // Compruebo si la persona esta en el lista if (!this.personas.contains(p)) { // Lo añado a la lista this.personas.add(p); // Seteo los items this.tblPersonas.setItems(personas); } else { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("La persona existe"); alert.showAndWait(); } } catch (NumberFormatException e) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Formato incorrecto"); alert.showAndWait(); } } } — Modelo Persona package modelo; import java.util.Objects; public class Persona { private String nombre; private String apellidos; private int edad; public Persona(String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } @Override public int hashCode() { int hash = 3; return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Persona other = (Persona) obj; if (this.edad != other.edad) { return false; } if (!Objects.equals(this.nombre, other.nombre)) { return false; } if (!Objects.equals(this.apellidos, other.apellidos)) { return false; } return true; } } — PersonaVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="639.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonaController"> <children> <Button fx:id="btnAgregar" layoutX="25.0" layoutY="348.0" mnemonicParsing="false" onAction="#agregarPersona" prefHeight="25.0" prefWidth="149.0" text="Agregar persona" /> <TextField fx:id="txtNombre" layoutX="25.0" layoutY="88.0" /> <Label layoutX="25.0" layoutY="53.0" text="Nombre" /> <Label layoutX="25.0" layoutY="158.0" text="Apellidos" /> <TextField fx:id="txtApellidos" layoutX="25.0" layoutY="193.0" /> <TextField fx:id="txtEdad" layoutX="25.0" layoutY="287.0" /> <Label layoutX="25.0" layoutY="252.0" text="Edad" /> <TableView fx:id="tblPersonas" layoutX="220.0" layoutY="67.0" prefHeight="306.0" prefWidth="403.0"> <columns> <TableColumn fx:id="colNombre" prefWidth="147.0" text="Nombre" /> <TableColumn fx:id="colApellidos" prefWidth="145.0" text="Apellidos" /> <TableColumn fx:id="colEdad" prefWidth="105.0" text="Edad" /> </columns> </TableView> </children> </AnchorPane> |
4) Dado el ejercicio anterior, agrega lo siguiente.
Al seleccionar en un registro, mostrara los datos en los txt.
Al pulsar el botón Modificar, el registro seleccionado se modificara con los datos que hay en los txt(editando el objeto).
Al pulsar el botón Eliminar, el registro seleccionado se eliminara de la tabla.
Puedes descargarlo aquí.
Spoiler Inside | SelectShow> |
---|---|
— Main package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { //Cargo la vista FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/PersonaVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } — PersonaController package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.MouseEvent; import modelo.Persona; public class PersonaController implements Initializable { @FXML private Button btnAgregar; @FXML private TextField txtNombre; @FXML private TextField txtApellidos; @FXML private TextField txtEdad; @FXML private TableView<Persona> tblPersonas; @FXML private TableColumn colNombre; @FXML private TableColumn colApellidos; @FXML private TableColumn colEdad; private ObservableList<Persona> personas; @FXML private Button btnModificar; @FXML private Button btnEliminar; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { personas = FXCollections.observableArrayList(); this.colNombre.setCellValueFactory(new PropertyValueFactory("nombre")); this.colApellidos.setCellValueFactory(new PropertyValueFactory("apellidos")); this.colEdad.setCellValueFactory(new PropertyValueFactory("edad")); } @FXML private void agregarPersona(ActionEvent event) { try { // Obtengo los datos del formulario String nombre = this.txtNombre.getText(); String apellidos = this.txtApellidos.getText(); int edad = Integer.parseInt(this.txtEdad.getText()); // Creo una persona Persona p = new Persona(nombre, apellidos, edad); // Compruebo si la persona esta en el lista if (!this.personas.contains(p)) { // Lo añado a la lista this.personas.add(p); // Seteo los items this.tblPersonas.setItems(personas); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Info"); alert.setContentText("Persona añadida"); alert.showAndWait(); } else { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("La persona existe"); alert.showAndWait(); } } catch (NumberFormatException e) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Formato incorrecto"); alert.showAndWait(); } } @FXML private void seleccionar(MouseEvent event) { // Obtengo la persona seleccionada Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); // Sino es nula seteo los campos if (p != null) { this.txtNombre.setText(p.getNombre()); this.txtApellidos.setText(p.getApellidos()); this.txtEdad.setText(p.getEdad() + ""); } } @FXML private void modificar(ActionEvent event) { // Obtengo la persona seleccionada Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); // Si la persona es nula, lanzo error if (p == null) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Debes seleccionar una persona"); alert.showAndWait(); } else { try { // Obtengo los datos del formulario String nombre = this.txtNombre.getText(); String apellidos = this.txtApellidos.getText(); int edad = Integer.parseInt(this.txtEdad.getText()); // Creo una persona Persona aux = new Persona(nombre, apellidos, edad); // Compruebo si la persona esta en el lista if (!this.personas.contains(aux)) { // Modifico el objeto p.setNombre(aux.getNombre()); p.setApellidos(aux.getApellidos()); p.setEdad(aux.getEdad()); // Refresco la tabla this.tblPersonas.refresh(); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Info"); alert.setContentText("Persona modificada"); alert.showAndWait(); } else { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("La persona existe"); alert.showAndWait(); } } catch (NumberFormatException e) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Formato incorrecto"); alert.showAndWait(); } } } @FXML private void eliminar(ActionEvent event) { // Obtengo la persona seleccionada Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); // Si la persona es nula, lanzo error if (p == null) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Debes seleccionar una persona"); alert.showAndWait(); } else { // La elimino de la lista this.personas.remove(p); // Refresco la lista this.tblPersonas.refresh(); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Info"); alert.setContentText("Persona eliminada"); alert.showAndWait(); } } } — Modelo Persona package modelo; import java.util.Objects; public class Persona { private String nombre; private String apellidos; private int edad; public Persona(String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } @Override public int hashCode() { int hash = 3; return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Persona other = (Persona) obj; if (this.edad != other.edad) { return false; } if (!Objects.equals(this.nombre, other.nombre)) { return false; } if (!Objects.equals(this.apellidos, other.apellidos)) { return false; } return true; } } — PersonaVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="433.0" prefWidth="639.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonaController"> <children> <Button fx:id="btnAgregar" layoutX="25.0" layoutY="348.0" mnemonicParsing="false" onAction="#agregarPersona" prefHeight="25.0" prefWidth="149.0" text="Agregar persona" /> <TextField fx:id="txtNombre" layoutX="25.0" layoutY="102.0" /> <Label layoutX="28.0" layoutY="67.0" text="Nombre" /> <Label layoutX="25.0" layoutY="158.0" text="Apellidos" /> <TextField fx:id="txtApellidos" layoutX="25.0" layoutY="193.0" /> <TextField fx:id="txtEdad" layoutX="25.0" layoutY="287.0" /> <Label layoutX="25.0" layoutY="255.0" text="Edad" /> <TableView fx:id="tblPersonas" layoutX="220.0" layoutY="67.0" onMouseClicked="#seleccionar" prefHeight="306.0" prefWidth="403.0"> <columns> <TableColumn fx:id="colNombre" prefWidth="147.0" text="Nombre" /> <TableColumn fx:id="colApellidos" prefWidth="145.0" text="Apellidos" /> <TableColumn fx:id="colEdad" prefWidth="105.0" text="Edad" /> </columns> </TableView> <Button fx:id="btnModificar" layoutX="241.0" layoutY="394.0" mnemonicParsing="false" onAction="#modificar" prefHeight="25.0" prefWidth="169.0" text="Modificar" /> <Button fx:id="btnEliminar" layoutX="444.0" layoutY="394.0" mnemonicParsing="false" onAction="#eliminar" prefHeight="25.0" prefWidth="156.0" text="Eliminar" /> </children> </AnchorPane> |
5) Dado el ejercicio anterior, modifica la ventana.
Al pulsar el botón de agregar Persona, se mostrara la siguiente ventana.
Cuando rellenamos los datos, cerrara la ventana y añadirá la persona a la tabla.
Puedes descargarlo aquí.
Spoiler Inside | SelectShow> |
---|---|
— Main /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; /** * * @author Fernando */ public class Main extends Application { @Override public void start(Stage primaryStage) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/PersonasVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } — PersonaDialogController package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.stage.Stage; import modelo.Persona; public class PersonaDialogControlador implements Initializable { @FXML private TextField txtEdad; @FXML private TextField txtApellidos; @FXML private TextField txtNombre; @FXML private Button btnGuardar; @FXML private Button btnSalir; private Persona persona; private ObservableList<Persona> personas; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { } public void initAttributtes(ObservableList<Persona> personas) { this.personas = personas; } @FXML private void guardar(ActionEvent event) { // Cojo los datos String nombre = this.txtNombre.getText(); String apellidos = this.txtApellidos.getText(); int edad = Integer.parseInt(this.txtEdad.getText()); // Creo la persona Persona p = new Persona(nombre, apellidos, edad); // Compruebo si la persona existe if (!personas.contains(p)) { this.persona = p; Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Informacion"); alert.setContentText("Se ha añadido correctamente"); alert.showAndWait(); // Cerrar ventana Stage stage = (Stage) this.btnGuardar.getScene().getWindow(); stage.close(); } else { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("La persona ya existe"); alert.showAndWait(); } } @FXML private void salir(ActionEvent event) { this.persona = null; // Cerrar ventana Stage stage = (Stage) this.btnGuardar.getScene().getWindow(); stage.close(); } public Persona getPersona() { return persona; } } — PersonasController package controlador; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Modality; import javafx.stage.Stage; import modelo.Persona; public class PersonasControlador implements Initializable { @FXML private Button btnAgregar; @FXML private TableView<Persona> tblPersonas; @FXML private TableColumn colNombre; @FXML private TableColumn colApellidos; @FXML private TableColumn colEdad; private ObservableList<Persona> personas; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { personas = FXCollections.observableArrayList(); this.tblPersonas.setItems(personas); this.colNombre.setCellValueFactory(new PropertyValueFactory("nombre")); this.colApellidos.setCellValueFactory(new PropertyValueFactory("apellidos")); this.colEdad.setCellValueFactory(new PropertyValueFactory("edad")); } @FXML private void agregarPersona(ActionEvent event) { try { // Cargo la vista FXMLLoader loader = new FXMLLoader(getClass().getResource("/vista/PersonaDialogVista.fxml")); // Cargo la ventana Parent root = loader.load(); // Cojo el controlador PersonaDialogControlador controlador = loader.getController(); controlador.initAttributtes(personas); // Creo el Scene Scene scene = new Scene(root); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.setScene(scene); stage.showAndWait(); // cojo la persona devuelta Persona p = controlador.getPersona(); if (p != null) { // Añado la persona this.personas.add(p); // Refresco la tabla this.tblPersonas.refresh(); } } catch (IOException ex) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText(ex.getMessage()); alert.showAndWait(); } } } — Modelo Persona package modelo; import java.util.Objects; public class Persona { private String nombre; private String apellidos; private int edad; public Persona(String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } @Override public int hashCode() { int hash = 3; return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Persona other = (Persona) obj; if (this.edad != other.edad) { return false; } if (!Objects.equals(this.nombre, other.nombre)) { return false; } if (!Objects.equals(this.apellidos, other.apellidos)) { return false; } return true; } } — PersonaDialogVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" focusTraversable="true" maxHeight="383.0" maxWidth="185.0" minHeight="345.0" minWidth="185.0" prefHeight="383.0" prefWidth="185.0" snapToPixel="false" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonaDialogControlador"> <children> <Label layoutX="17.0" layoutY="213.0" text="Edad" /> <TextField fx:id="txtEdad" layoutX="19.0" layoutY="242.0" /> <TextField fx:id="txtApellidos" layoutX="19.0" layoutY="160.0" /> <Label layoutX="17.0" layoutY="126.0" text="Apellidos" /> <Label layoutX="19.0" layoutY="40.0" text="Nombre" /> <TextField fx:id="txtNombre" layoutX="19.0" layoutY="73.0" /> <Button fx:id="btnGuardar" layoutX="22.0" layoutY="299.0" mnemonicParsing="false" onAction="#guardar" prefHeight="25.0" prefWidth="149.0" text="Guardar" /> <Button fx:id="btnSalir" layoutX="22.0" layoutY="337.0" mnemonicParsing="false" onAction="#salir" prefHeight="25.0" prefWidth="149.0" text="Salir" /> </children> </AnchorPane> — PersonasVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="433.0" prefWidth="639.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonasControlador"> <children> <Button fx:id="btnAgregar" layoutX="60.0" layoutY="394.0" mnemonicParsing="false" onAction="#agregarPersona" prefHeight="25.0" prefWidth="149.0" text="Agregar persona" /> <TableView fx:id="tblPersonas" layoutX="34.0" layoutY="67.0" prefHeight="306.0" prefWidth="589.0"> <columns> <TableColumn fx:id="colNombre" prefWidth="215.0" text="Nombre" /> <TableColumn fx:id="colApellidos" prefWidth="237.0" text="Apellidos" /> <TableColumn fx:id="colEdad" prefWidth="123.0" text="Edad" /> </columns> </TableView> </children> </AnchorPane> |
6) Dado el ejercicio anterior, modifica la ventana.
Al pulsar el botón de agregar Persona, se mostrara la siguiente ventana.
Cuando rellenamos los datos, cerrara la ventana y añadirá la persona a la tabla.
Cuando pulsemos modificar, se abrirá la ventana anterior, pero con los datos cargados y al guardar editara el objeto seleccionado.
Cuando pulsemos eliminar, eliminar el objeto de la tabla.
Puedes descargarlo aquí.
Spoiler Inside | SelectShow> |
---|---|
— Main package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/PersonasVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } — PersonasDialogController package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.stage.Stage; import modelo.Persona; public class PersonaDialogControlador implements Initializable { @FXML private TextField txtEdad; @FXML private TextField txtApellidos; @FXML private TextField txtNombre; @FXML private Button btnGuardar; @FXML private Button btnSalir; private Persona persona; private ObservableList<Persona> personas; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { } public void initAttributtes(ObservableList<Persona> personas) { this.personas = personas; } public void initAttributtes(ObservableList<Persona> personas, Persona p) { this.personas = personas; this.persona = p; // cargo los datos de la persona this.txtNombre.setText(p.getNombre()); this.txtApellidos.setText(p.getApellidos()); this.txtEdad.setText(p.getEdad() + ""); } @FXML private void guardar(ActionEvent event) { // Cojo los datos String nombre = this.txtNombre.getText(); String apellidos = this.txtApellidos.getText(); int edad = Integer.parseInt(this.txtEdad.getText()); // Creo la persona Persona p = new Persona(nombre, apellidos, edad); // Compruebo si la persona existe if (!personas.contains(p)) { // Modificar if (this.persona != null) { // Modifico el objeto this.persona.setNombre(nombre); this.persona.setApellidos(apellidos); this.persona.setEdad(edad); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Informacion"); alert.setContentText("Se ha modificado correctamente"); alert.showAndWait(); } else { // insertando this.persona = p; Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Informacion"); alert.setContentText("Se ha añadido correctamente"); alert.showAndWait(); } // Cerrar la ventana Stage stage = (Stage) this.btnGuardar.getScene().getWindow(); stage.close(); } else { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("La persona ya existe"); alert.showAndWait(); } } @FXML private void salir(ActionEvent event) { this.persona = null; // Cerrar la ventana Stage stage = (Stage) this.btnGuardar.getScene().getWindow(); stage.close(); } public Persona getPersona() { return persona; } } — PersonasController package controlador; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Modality; import javafx.stage.Stage; import modelo.Persona; public class PersonasControlador implements Initializable { @FXML private Button btnAgregar; @FXML private TableView<Persona> tblPersonas; @FXML private TableColumn colNombre; @FXML private TableColumn colApellidos; @FXML private TableColumn colEdad; private ObservableList<Persona> personas; @FXML private Button btnModificar; @FXML private Button btnEliminar; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { personas = FXCollections.observableArrayList(); this.tblPersonas.setItems(personas); this.colNombre.setCellValueFactory(new PropertyValueFactory("nombre")); this.colApellidos.setCellValueFactory(new PropertyValueFactory("apellidos")); this.colEdad.setCellValueFactory(new PropertyValueFactory("edad")); } @FXML private void agregarPersona(ActionEvent event) { try { // Cargo la vista FXMLLoader loader = new FXMLLoader(getClass().getResource("/vista/PersonaDialogVista.fxml")); // Cargo la ventana Parent root = loader.load(); // Cojo el controlador PersonaDialogControlador controlador = loader.getController(); controlador.initAttributtes(personas); // Creo el Scene Scene scene = new Scene(root); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.setScene(scene); stage.showAndWait(); // cojo la persona devuelta Persona p = controlador.getPersona(); if (p != null) { // Añado la persona this.personas.add(p); // Refresco la tabla this.tblPersonas.refresh(); } } catch (IOException ex) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText(ex.getMessage()); alert.showAndWait(); } } @FXML private void modificar(ActionEvent event) { Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); if (p == null) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Debes seleccionar una persona"); alert.showAndWait(); } else { try { // Cargo la vista FXMLLoader loader = new FXMLLoader(getClass().getResource("/vista/PersonaDialogVista.fxml")); // Cargo la ventana Parent root = loader.load(); // Cojo el controlador PersonaDialogControlador controlador = loader.getController(); controlador.initAttributtes(personas, p); // Creo el Scene Scene scene = new Scene(root); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.setScene(scene); stage.showAndWait(); // cojo la persona devuelta Persona aux = controlador.getPersona(); if (aux != null) { this.tblPersonas.refresh(); } } catch (IOException ex) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText(ex.getMessage()); alert.showAndWait(); } } } @FXML private void eliminar(ActionEvent event) { Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); if (p == null) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Debes seleccionar una persona"); alert.showAndWait(); } else { // Elimino la persona this.personas.remove(p); this.tblPersonas.refresh(); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Info"); alert.setContentText("Se ha borrado la persona"); alert.showAndWait(); } } } — Persona package modelo; import java.util.Objects; public class Persona { private String nombre; private String apellidos; private int edad; public Persona(String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } @Override public int hashCode() { int hash = 3; return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Persona other = (Persona) obj; if (this.edad != other.edad) { return false; } if (!Objects.equals(this.nombre, other.nombre)) { return false; } if (!Objects.equals(this.apellidos, other.apellidos)) { return false; } return true; } } — PersonaDialogVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" focusTraversable="true" maxHeight="383.0" maxWidth="185.0" minHeight="345.0" minWidth="185.0" prefHeight="383.0" prefWidth="185.0" snapToPixel="false" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonaDialogControlador"> <children> <Label layoutX="17.0" layoutY="213.0" text="Edad" /> <TextField fx:id="txtEdad" layoutX="19.0" layoutY="242.0" /> <TextField fx:id="txtApellidos" layoutX="19.0" layoutY="160.0" /> <Label layoutX="17.0" layoutY="126.0" text="Apellidos" /> <Label layoutX="19.0" layoutY="40.0" text="Nombre" /> <TextField fx:id="txtNombre" layoutX="19.0" layoutY="73.0" /> <Button fx:id="btnGuardar" layoutX="22.0" layoutY="299.0" mnemonicParsing="false" onAction="#guardar" prefHeight="25.0" prefWidth="149.0" text="Guardar" /> <Button fx:id="btnSalir" layoutX="22.0" layoutY="337.0" mnemonicParsing="false" onAction="#salir" prefHeight="25.0" prefWidth="149.0" text="Salir" /> </children> </AnchorPane> — PersonasVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="433.0" prefWidth="639.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonasControlador"> <children> <Button fx:id="btnAgregar" layoutX="60.0" layoutY="394.0" mnemonicParsing="false" onAction="#agregarPersona" prefHeight="25.0" prefWidth="149.0" text="Agregar persona" /> <TableView fx:id="tblPersonas" layoutX="34.0" layoutY="67.0" prefHeight="306.0" prefWidth="589.0"> <columns> <TableColumn fx:id="colNombre" prefWidth="215.0" text="Nombre" /> <TableColumn fx:id="colApellidos" prefWidth="237.0" text="Apellidos" /> <TableColumn fx:id="colEdad" prefWidth="123.0" text="Edad" /> </columns> </TableView> <Button fx:id="btnModificar" layoutX="245.0" layoutY="394.0" mnemonicParsing="false" onAction="#modificar" prefHeight="25.0" prefWidth="149.0" text="Modificar persona" /> <Button fx:id="btnEliminar" layoutX="430.0" layoutY="394.0" mnemonicParsing="false" onAction="#eliminar" prefHeight="25.0" prefWidth="149.0" text="Eliminar persona" /> </children> </AnchorPane> |
7) Dado el ejercicio anterior, modifica la ventana (se mantiene el dialogo de persona).
Cuando escribamos en el txt de arriba, filtrara los nombre de las personas que contengan el texto que tu indiques.
Puedes descargarlo aquí.
Spoiler Inside | SelectShow> |
---|---|
— Main package controlador; import java.io.IOException; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/vista/PersonasVista.fxml")); // Cargo la ventana Pane ventana = (Pane) loader.load(); // Cargo el scene Scene scene = new Scene(ventana); // Seteo la scene y la muestro primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } — PersonaDialogController package controlador; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.stage.Stage; import modelo.Persona; public class PersonaDialogControlador implements Initializable { @FXML private TextField txtEdad; @FXML private TextField txtApellidos; @FXML private TextField txtNombre; private Persona persona; private ObservableList<Persona> personas; @FXML private Button btnGuardar; @FXML private Button btnSalir; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { } public void initAtributtes(ObservableList<Persona> personas) { this.personas = personas; } public void initAtributtes(ObservableList<Persona> personas, Persona persona) { this.personas = personas; this.persona = persona; // cargo los datos de la persona this.txtNombre.setText(this.persona.getNombre()); this.txtApellidos.setText(this.persona.getApellidos()); this.txtEdad.setText(this.persona.getEdad() + ""); } public Persona getPersona() { return persona; } @FXML private void guardar(ActionEvent event) { // Cojo los datos String nombre = this.txtNombre.getText(); String apellidos = this.txtApellidos.getText(); int edad = Integer.parseInt(this.txtEdad.getText()); // Creo la persona Persona p = new Persona(nombre, apellidos, edad); // Compruebo si la persona existe if (!personas.contains(p)) { // Modificar if (this.persona != null) { // Modifico el objeto this.persona.setNombre(nombre); this.persona.setApellidos(apellidos); this.persona.setEdad(edad); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Informacion"); alert.setContentText("Se ha modificado correctamente"); alert.showAndWait(); } else { // insertando this.persona = p; Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Informacion"); alert.setContentText("Se ha añadido correctamente"); alert.showAndWait(); } // Cerrar la ventana Stage stage = (Stage) this.btnGuardar.getScene().getWindow(); stage.close(); } else { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("La persona ya existe"); alert.showAndWait(); } } @FXML private void salir(ActionEvent event) { this.persona = null; // Cerrar la ventana Stage stage = (Stage) this.btnGuardar.getScene().getWindow(); stage.close(); } } — PersonasController package controlador; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.KeyEvent; import javafx.stage.Modality; import javafx.stage.Stage; import modelo.Persona; public class PersonasController implements Initializable { @FXML private Button btnAgregar; @FXML private TableView<Persona> tblPersonas; @FXML private TableColumn colNombre; @FXML private TableColumn colApellidos; @FXML private TableColumn colEdad; private ObservableList<Persona> personas; private ObservableList<Persona> filtroPersonas; @FXML private Button btnModificar; @FXML private Button btnEliminar; @FXML private TextField txtFiltrarNombre; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { personas = FXCollections.observableArrayList(); filtroPersonas = FXCollections.observableArrayList(); this.tblPersonas.setItems(personas); this.colNombre.setCellValueFactory(new PropertyValueFactory("nombre")); this.colApellidos.setCellValueFactory(new PropertyValueFactory("apellidos")); this.colEdad.setCellValueFactory(new PropertyValueFactory("edad")); } @FXML private void agregarPersona(ActionEvent event) { try { // Cargo la vista FXMLLoader loader = new FXMLLoader(getClass().getResource("/vista/PersonaDialogVista.fxml")); // Cargo la ventana Parent root = loader.load(); // Cojo el controlador PersonaDialogControlador controlador = loader.getController(); controlador.initAtributtes(personas); // Creo el Scene Scene scene = new Scene(root); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.setScene(scene); stage.showAndWait(); // cojo la persona devuelta Persona p = controlador.getPersona(); if (p != null) { personas.add(p); if (p.getNombre().toLowerCase().contains(this.txtFiltrarNombre.getText().toLowerCase())) { this.filtroPersonas.add(p); } this.tblPersonas.refresh(); } } catch (IOException e) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText(e.getMessage()); alert.showAndWait(); } } @FXML private void modificar(ActionEvent event) { Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); if (p == null) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Debes seleccionar una persona"); alert.showAndWait(); } else { try { // Cargo la vista FXMLLoader loader = new FXMLLoader(getClass(). getResource("/vista/PersonaDialogVista.fxml")); // Cargo la ventana Parent root = loader.load(); // Cojo el controlador PersonaDialogControlador controlador = loader.getController(); controlador.initAtributtes(personas, p); // Creo el Scene Scene scene = new Scene(root); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.setScene(scene); stage.showAndWait(); // cojo la persona devuelta Persona pSeleccionado = controlador.getPersona(); if (pSeleccionado != null) { if (!pSeleccionado.getNombre().toLowerCase(). contains(this.txtFiltrarNombre.getText().toLowerCase())) { this.filtroPersonas.remove(pSeleccionado); } this.tblPersonas.refresh(); } } catch (IOException e) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText(e.getMessage()); alert.showAndWait(); } } } @FXML private void eliminar(ActionEvent event) { Persona p = this.tblPersonas.getSelectionModel().getSelectedItem(); if (p == null) { Alert alert = new Alert(Alert.AlertType.ERROR); alert.setHeaderText(null); alert.setTitle("Error"); alert.setContentText("Debes seleccionar una persona"); alert.showAndWait(); } else { // Elimino la persona this.personas.remove(p); this.filtroPersonas.remove(p); this.tblPersonas.refresh(); Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle("Info"); alert.setContentText("Persona eliminada"); alert.showAndWait(); } } @FXML private void filtrarNombre(KeyEvent event) { String filtroNombre = this.txtFiltrarNombre.getText(); // Si el texto del nombre esta vacio, seteamos la tabla de personas con el original if (filtroNombre.isEmpty()) { this.tblPersonas.setItems(personas); } else { // Limpio la lista this.filtroPersonas.clear(); for (Persona p : this.personas) { if (p.getNombre().toLowerCase().contains(filtroNombre.toLowerCase())) { this.filtroPersonas.add(p); } } this.tblPersonas.setItems(filtroPersonas); } } } — Modelo Persona package modelo; import java.util.Objects; public class Persona { private String nombre; private String apellidos; private int edad; public Persona(String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } @Override public int hashCode() { int hash = 3; return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Persona other = (Persona) obj; if (this.edad != other.edad) { return false; } if (!Objects.equals(this.nombre, other.nombre)) { return false; } if (!Objects.equals(this.apellidos, other.apellidos)) { return false; } return true; } } — PersonaDialogVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" focusTraversable="true" maxHeight="383.0" maxWidth="185.0" minHeight="345.0" minWidth="185.0" prefHeight="383.0" prefWidth="185.0" snapToPixel="false" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonaDialogControlador"> <children> <Label layoutX="17.0" layoutY="213.0" text="Edad" /> <TextField fx:id="txtEdad" layoutX="19.0" layoutY="242.0" /> <TextField fx:id="txtApellidos" layoutX="19.0" layoutY="160.0" /> <Label layoutX="17.0" layoutY="126.0" text="Apellidos" /> <Label layoutX="19.0" layoutY="40.0" text="Nombre" /> <TextField fx:id="txtNombre" layoutX="19.0" layoutY="73.0" /> <Button fx:id="btnGuardar" layoutX="22.0" layoutY="299.0" mnemonicParsing="false" onAction="#guardar" prefHeight="25.0" prefWidth="149.0" text="Guardar" /> <Button fx:id="btnSalir" layoutX="22.0" layoutY="337.0" mnemonicParsing="false" onAction="#salir" prefHeight="25.0" prefWidth="149.0" text="Salir" /> </children> </AnchorPane> — PersonasVista <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="433.0" prefWidth="639.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controlador.PersonasController"> <children> <Button fx:id="btnAgregar" layoutX="60.0" layoutY="394.0" mnemonicParsing="false" onAction="#agregarPersona" prefHeight="25.0" prefWidth="149.0" text="Agregar persona" /> <TableView fx:id="tblPersonas" layoutX="34.0" layoutY="67.0" prefHeight="306.0" prefWidth="589.0"> <columns> <TableColumn fx:id="colNombre" prefWidth="215.0" text="Nombre" /> <TableColumn fx:id="colApellidos" prefWidth="237.0" text="Apellidos" /> <TableColumn fx:id="colEdad" prefWidth="123.0" text="Edad" /> </columns> </TableView> <Button fx:id="btnModificar" layoutX="241.0" layoutY="394.0" mnemonicParsing="false" onAction="#modificar" prefHeight="25.0" prefWidth="169.0" text="Modificar persona" /> <Button fx:id="btnEliminar" layoutX="444.0" layoutY="394.0" mnemonicParsing="false" onAction="#eliminar" prefHeight="25.0" prefWidth="156.0" text="Eliminar persona" /> <Label layoutX="40.0" layoutY="29.0" text="Filtrar por nombre:" /> <TextField fx:id="txtFiltrarNombre" layoutX="154.0" layoutY="25.0" onKeyReleased="#filtrarNombre" /> </children> </AnchorPane> |
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Muchas gracias por los ejercicios.
https://omegaup.com/arena/problem/Proyectiles#problems
Podrías resolver este problema?
Descripción
Es el año de 2310 y eres el líder de una flota espacial, tu labor es proyectar las naves al espacio. Para ayudarte en tu tarea tienes una pantalla con coordenadas en x y y.
Cuando disparas una nave esta viaja a la velocidad de la luz durante un tiempo indefinido que puede variar dependiendo del tipo de nave espacial, pero ésta paulatinamente se estaciona en un lugar del espacio, en el lugar (x, y, z), donde (x, y) fue la coordenada en la que la disparaste en la pantalla y z fue la distancia que viajó en la profundidad el espacio.
Problema
Dado que tienes diferentes tipos de naves espaciales y no sabes hasta que profundidad éstas podrían viajar, quieres disparar las naves espaciales de modo que no corras el riego que al disparar una se choque con otra, es decir que no compartan las coordenadas x, y.
Entrada
Linea 1: 2 números enteros separados por un espacio, n y k respectivamente, que indicará el número n de coordenadas ya disparadas. Siguientes n líneas: En cada una un par de números enteros, (x, y), tales que, representarán una nave ya disparada en esta coordenada. Las siguientes k lineas: Las coordenadas de las siguientes naves que quieres disparar, de igual manera representada cada coordenada como un par de números enteros (x, y). Se te asegura que ningún par de coordenadas serán iguales.
Salida
Por cada nave especificada en las ultimas k líneas de la entrada, debes imprimir una línea, con un 1, en caso de que al disparar la nave no corra riego de chocar contra alguna otra, ó un 0 en caso contrario.
Hola es para saber si me ayuda con algo, es un proyecto de lotería de animal en donde yo registros mis jugadas y está se muestra en una tableview. Table yo coloco mis ganadores dependiendo la hora y está se muestra también en otra tableview y todo hasta está bien. La cuestión es que yo tengo que comparar datos de bases de datos. Compara las dos tableview y las tabla tengo cierto datos ( id, animal, hora, fecha, dinero) y la otra es (id, animal_ganador, hora, fecha) y tengo que comparar quienes fueron los ganadores y mostrarlo en otra tableview pero en javafx. Ya hice casi todo y me falta esto. Y de verdad me ayudaria mucho
Y de ante mano Gracias
soy nuevo ayuda !!!!
me imagino que para el main es una clase aparte cierto
y para el sumacontrol tambien osea para cada uno hay que crear una clase deferente pero dentro de la misma carpeta
( la cual yo tambien e llamado controlador )
quiero ayuda como Luis fonsi y daddy yankee
plis respondan soy nuevo ahora es que voy bpor la «Clase Math»