Está en la página 1de 10

Enlaces o explicaciones para aprender un poquito más.

Enlaces o explicaciones para aprender un poquito más. .............................................................. 1


Como cambiar la apariencia de Netbeans (el Look and Feel) a un color oscuro ...................... 2
Documentación oficial para consultar....................................................................................... 2
Tutorial de JavaFX, podéis encontrar información de los controles .......................................... 2
Como definir y darle funcionalidad a un Spinner ...................................................................... 2
Como crear un CheckBox .......................................................................................................... 2
Diferencia entre id y fx:id en javafx ........................................................................................... 3
Cómo se setea el título en el FormularioPrincipal.fxml ............................................................ 3
Cómo añadir una imagen como icono en el FormularioPrincipal.fxml ..................................... 3
Como abrir una interface desde el menú .................................................................................. 3
Como aplicar estilos CSS a una aplicación en JavaFX ................................................................ 3
Enlaces interesantes de eventos ............................................................................................... 3
Validar campos con la librería JFoenix....................................................................................... 3
Curso de JavaFX aunque utiliza otro IDE ................................................................................... 4
Ejemplos del control DatePicker ............................................................................................... 4
Crear interfaces gráficas con JavaFX.......................................................................................... 4
Como agregar una imagen de fondo en JavaFX ........................................................................ 4
Cambiar la fuente de las opciones de menú ............................................................................. 4
Cambiar por código la tipografía ............................................................................................... 4
Resumen dudas importantes de tutoría o mensajes privados recibidos ...................................... 5
No consigo ejecutar el proyecto porque el controlador y el fxml no están enlazados ............. 5
¿Cómo recuperar el stage desde el botón del menú? .............................................................. 6
¿Cómo puedo recuperar un stage inicial en cualquier momento sin duplicarlo?..................... 7
¿Cómo poner modalidad a un Stage? ....................................................................................... 7
Añadir una imagen a un botón .................................................................................................. 7
Como se deshabilitan las fechas anteriores a la actual en un DatePicker y se ponen en color
rojo. ........................................................................................................................................... 8
¿Cómo se haría para que la fecha de salida no fuese anterior a la fecha de entrada? ............. 8
Como cambiar la apariencia de Netbeans (el Look and Feel) a un color oscuro

Tools -> Options -> Appearance -> Look and Feel -> se selecciona el fondo (por ejemplo
Dark Metal) -> Apply -> OK -> y se reseatea el Netbeans.

También se podrían descargar otros plugins:


https://oregoom.com/java/cambiar-color-netbeans/

Documentación oficial para consultar

Documentación DatePicker:
https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/date-picker.htm

Documentación MenuItem:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/MenuItem.html

Documentación Button:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Button.html

Documentación Stage:

https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage.html

Tutorial de JavaFX, podéis encontrar información de los controles


http://www.java2s.com/Tutorials/Java/JavaFX/index.htm

Como definir y darle funcionalidad a un Spinner

https://www.youtube.com/watch?v=yc4O6FWjdZA

Como crear un CheckBox

https://www.educba.com/javafx-checkbox/

https://www.geeksforgeeks.org/javafx-checkbox/
Diferencia entre id y fx:id en javafx

https://stackoverflow.com/questions/23686325/whats-the-difference-between-fxid-
and-id-in-javafx

Cómo se setea el título en el FormularioPrincipal.fxml

En la clase EjemploInterfazHotel.java, en el método start, simplemente hay que hacer


lo siguiente:
stage.setTitle("Xestión Hoteleira BK");

Cómo añadir una imagen como icono en el FormularioPrincipal.fxml

En la clase EjemploInterfazHotel.java, en el método start, simplemente hay que hacer


lo siguiente:

stage.getIcons().add(new Image("rutaImagen"));

Como abrir una interface desde el menú

Primero mirad el vídeo del apartado de tutoría colectiva: 3- Añadir en SceneBuilder


una barra de menú.

https://es.stackoverflow.com/questions/226364/abrir-ventana-desde-un-menuitem-
en-javafx

Como aplicar estilos CSS a una aplicación en JavaFX

https://www.naidoprograms.com/2020/09/como-aplicar-estilos-css-tu-aplicacion.html

Enlaces interesantes de eventos

http://acodigo.blogspot.com/2017/06/eventos-en-javafx.html
http://www.developandsys.es/manejo-de-eventos-en-javafx/
https://skeoop.github.io/javafx/Event-Handling.pdf

Validar campos con la librería JFoenix


https://www.youtube.com/watch?v=zoQ4zxqMn7E

Curso de JavaFX aunque utiliza otro IDE

https://www.youtube.com/watch?v=9XJicRt_FaI

Ejemplos del control DatePicker


Para que en el calendario no se marque una fecha al día actual os podríais basar en el
ejemplo 23, pero habría que adaptarlo:

https://www.programcreek.com/java-api-
examples/?api=javafx.scene.control.DatePicker

Crear interfaces gráficas con JavaFX

(Usa la versión 8.2 de Netbeans)


https://www.youtube.com/watch?v=uwHxL1--bnY

Como agregar una imagen de fondo en JavaFX

https://www.delftstack.com/es/howto/java/javafx-background-image/

Cambiar la fuente de las opciones de menú

https://stackoverflow.com/questions/34682448/javafx-css-font-color-in-menuitem

Cambiar por código la tipografía

https://www.javaguides.net/2020/10/javafx-text-font-and-color-example.html

https://www.youtube.com/watch?v=7bgCt-ZPK0c
Resumen dudas importantes de tutoría o mensajes privados
recibidos

No consigo ejecutar el proyecto porque el controlador y el fxml no están


enlazados

Se podría hacer de dos formas:


(Suponemos que quiero lanzar FormularioSalones.fxml y
FormularioSalonesController.fxml)

Botón derecho sobre FormularioSalones.fxml, edit, y ahí tenéis que ponerle el nombre
del paquete y el nombre del controlador donde aparece fx:controller

Otra forma sería abrir el FormularioSalones.fxml en SceneBuilder y cubrir el apartado


Controller.
¿Cómo recuperar el stage desde el botón del menú?

El componente MenuItem de fxml no tiene la opción de poder recuperar el Stage de la ventana


como se hace con los botones:

Stage stage =(Stage) nombreBoton.getScene().getWindow();


Entonces se podría hacer de varias formas, pongo dos:
Primera forma (en este caso os abre un nuevo fxml, deberíais cerrar el anterior o controlar la
modalidad):
FXMLLoader loader = new FXMLLoader(getClass().getResource("nombreFXML.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();

Segunda forma:
//Se declara el componente MenuItem
@FXML private MenuItem nombreMenuItem;
//En el método onAction, cuando se pulsa sobre el componente MenuItem se haría lo
//siguiente:
Stage stage =(Stage) nombreMenuItem.getParentPopup().getOwnerWindow();
Parent root = FXMLLoader.load(getClass().getResource("nombreFXML_A.fxml"));
if(event.getSource()==nombreMenuItem){
stage=(Stage) nombreMenuItem.getParentPopup().getOwnerWindow();
root = FXMLLoader.load(getClass().getResource("nombreFXML_B.fxml"));
}

Scene scene = new Scene(root);


stage.setScene(scene);
stage.show();

¿Cómo puedo recuperar un stage inicial en cualquier momento sin duplicarlo?

El problema era el siguiente: Una alumna haciendo la tarea, tenía la pantalla principal, después
al pulsar en el menú cargaba un nuevo fxml que le llevaba a la pantalla de reservar salones, ahí
tenía un botón Cancelar y quería que al pulsar el botón se pudiese volver a la pantalla inicial
pero no tenía forma de recuperar el stage inicial sin duplicar.

La solución sería crear una variable estática en el main, y guardar el stage en esa variable para
poder recuperarlo desde cualquier punto de la aplicación.

¿Cómo poner modalidad a un Stage?

stage.initModality (Modality.APPLICATION_MODAL);

Cuidado cuando ponéis modalidad a un stage porque si se la seteais y después volvéis al mismo
stage os dará un warning porque no se puede setear modalidad a un stage que ya ha sido
seteado a visible. Podéis ver una solución aquí:

https://stackoverflow.com/questions/40453675/java-lang-illegalstateexception-cannot-set-
modality-once-stage-has-been-set-vis

En otros casos no es necesario seteárselo, porque cuando cargáis un nuevo fxml podéis cerrar
el anterior.

Añadir una imagen a un botón

//Podéis ver los distintos parámetros del constructor aquí:

// https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html
Image imagenIcono = new Image ("rutaImagenIcono.png",15,15,false,false);

this.btnNombreBoton.setGraphic(new ImageView(imagenIcono));

Como se deshabilitan las fechas anteriores a la actual en un DatePicker y se


ponen en color rojo.

Esta es una posible solución (a los que entregasteis la tarea y no lo implementasteis ya os lo


puse en los comentarios):

//Primero tendríais que hacer lo siguiente:


@FXML
DatePicker nombreDatePicker;

//Y después en el initialize del controller llamar al método:


initUi();

//Y ese método haría lo siguiente:

private void initUI() {


Callback<DatePicker, DateCell> dayCellFactory = dp -> new DateCell()
{
@Override
public void updateItem(LocalDate item, boolean empty)
{
super.updateItem(item, empty);

if(item.isBefore(LocalDate.now()))
{
setStyle("-fx-background-color: #ffc0cb; -fx-text-fill: darkgray;");
setDisable(true);
}
}
};

nombreDatePicker.setDayCellFactory(dayCellFactory);
nombreDatePicker.setValue(LocalDate.now());

¿Cómo se haría para que la fecha de salida no fuese anterior a la fecha de


entrada?

Dos compañeros en sus tareas, implementaron la funcionalidad de que en la reserva de las


habitaciones (código fuente de la tarea), la fecha de salida dependa de la fecha de entrada
elegida, y no se permita escoger una fecha de salida anterior a la de entreda.
Partiendo del código de uno de ellos, lo he modificado y os pongo aquí una posible solución:

//Se definen los DatePicker (acordaros que en FXMLDocument.fxml, los dos datePicker tienen
que tener su fx:id cubierto, con estos nombres (nombreDatePickerLlegada,
nombreDatePickerSalida)):

@FXML
private DatePicker nombreDatePickerLlegada;
@FXML
private DatePicker nombreDatePickerSalida;

//Este código se copiaría en el método initialize del FXMLDocumentController.java

LocalDate fechaInicial = LocalDate.now();


nombreDatePickerLlegada.setEditable(false);
nombreDatePickerLlegada.setConverter(new
LocalDateStringConverter(FormatStyle.FULL));

//Modificamos las celdas del DatePicker para deshabilitar las anteriores a la fecha
actual
nombreDatePickerLlegada.setDayCellFactory(d
-> new DateCell() {
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty);
setDisable(item.isBefore(fechaInicial));
}
});

nombreDatePickerSalida.setEditable(false);
nombreDatePickerSalida.setConverter(new
LocalDateStringConverter(FormatStyle.FULL));
nombreDatePickerSalida.setDayCellFactory(d
-> new DateCell() {
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty);
setDisable(item.isBefore(nombreDatePickerLlegada.getValue() == null ?
fechaInicial.plusDays(1) : nombreDatePickerLlegada.getValue().plusDays(1)));
}
});

nombreDatePickerLlegada.setOnAction((event)-> {

boolean condicion =
nombreDatePickerLlegada.getValue().isAfter(nombreDatePickerSalida.getValue());

if (condicion){
nombreDatePickerSalida.setValue(nombreDatePickerLlegada.getValue().plusDays(1));
}
});

nombreDatePickerLlegada.setValue(LocalDate.now());
nombreDatePickerSalida.setValue(nombreDatePickerLlegada.getValue().plusDays(1));

También podría gustarte