Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tools -> Options -> Appearance -> Look and Feel -> se selecciona el fondo (por ejemplo
Dark Metal) -> Apply -> OK -> y se reseatea el Netbeans.
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
https://www.youtube.com/watch?v=yc4O6FWjdZA
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
stage.getIcons().add(new Image("rutaImagen"));
https://es.stackoverflow.com/questions/226364/abrir-ventana-desde-un-menuitem-
en-javafx
https://www.naidoprograms.com/2020/09/como-aplicar-estilos-css-tu-aplicacion.html
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
https://www.youtube.com/watch?v=9XJicRt_FaI
https://www.programcreek.com/java-api-
examples/?api=javafx.scene.control.DatePicker
https://www.delftstack.com/es/howto/java/javafx-background-image/
https://stackoverflow.com/questions/34682448/javafx-css-font-color-in-menuitem
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
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
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"));
}
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.
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.
// 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));
if(item.isBefore(LocalDate.now()))
{
setStyle("-fx-background-color: #ffc0cb; -fx-text-fill: darkgray;");
setDisable(true);
}
}
};
nombreDatePicker.setDayCellFactory(dayCellFactory);
nombreDatePicker.setValue(LocalDate.now());
//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;
//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));