Möchte man dem Benutzer einfache Nachrichten darstellen, welche nicht unbedingt eine Interaktion vom Benutzer verlangen, so haben, sich MessageGrowl’s in der Webentwicklung etabliert. Leider gibt es diese MessageGrowl Objekte nicht in JavaFX, einige andere Entwickler haben sich schon Gedanken dazu gemacht und diese umgesetzt, jedoch möchte auch ich meinen Beitrag dazu leisten und habe mir ein ganz eigenes MessageGrowl erzeugt.
Dieses ist im Grunde nichts anderes als eine Stage mit einer GrindPane und dem Inhalt, noch etwas CSS und etwas Businesslogik und schon hat man seine MessageGrowl.
Natürlich ist dieses stark vereinfacht zusammengefasst, aber ehrlich gesagt ist es wirklich kein Hexenwerk.
Dieses Projekt können Sie sich gerne am Ende dieses Beitrages herunterladen und nach Belieben verwenden.
Einbinden in ein Maven Projekt.
<!-- JavaFXMsgGrowl --> <dependency> <groupId>JavaFXMsgGrowl</groupId> <artifactId>JavaFXMsgGrowl</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/JavaFXMsgGrowl-0.0.1.jar</systemPath> </dependency>
Verwenden der MessageGrowl Klasse.
Für die Positionierung der MessageGrowl benötigt man eine Referenz auf die darunterliegende Stage. Diese bekommt man, indem man beim Laden der FXML Datei dem Controller diese Stage per getter & setter zuweist.
Die Main.java Klasse zum laden der FXML Datei.
URL url = getClass().getClassLoader().getResource("view/mainScreen.fxml"); FXMLLoader loader = new FXMLLoader(url); this.stage = (Stage) loader.load(); MessageGrowlExampleController msgGrowlExampleController = (MessageGrowlExampleController) loader.getController(); msgGrowlExampleController.setStage(this.stage); this.stage.show();
Die Klasse MessageGrowlExampleController welche die Methoden für die Schaltflächen und die Referenz auf die Stage enthält.
public class MessageGrowlExampleController implements Initializable { private MessageGrowl msgGrowl; private Stage stage; @Override public void initialize(URL location, ResourceBundle resources) {} public void setStage(Stage stage) { this.stage = stage; } public Stage getStage() { return this.stage; } }
Hier nun der Aufruf der Methode zum Erzeugen einer einfachen MessageGrowl.
@FXML public void handleShowInfoGrowl(ActionEvent event) { this.msgGrowl = new MessageGrowl(this.stage); this.msgGrowl.info("Titel #123", "Hallo Welt!"); }
Diese nun erstellte MessageGrowl wird an der rechten oberen Ecke der Stage dargestellt.
Möchte man jedoch das sich diese Nachricht von alleine schließt, so hat man mit der Methode:
@FXML public void handleShowInfoDelayGrowl(ActionEvent event) { this.msgGrowl = new MessageGrowl(this.stage); this.msgGrowl.info("Titel #123", "Hallo Welt!", 10000); }
Die Möglichkeit ein Delay (in Millisekunden) anzugeben, nach welcher sich diese Nachricht alleine schließen soll.
Hier nun das JavaArchiv zum Download: