Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Interfaces graphiques en Java Master 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin Scène de théatre AWT -> SWING -> JAVAFX Allégorie du théatre : Théatre = application = Stage Scène = fenetre = Scene Acteurs = objets graphiques Scène de théatre Architecture (1) Application Stage Scene Group Top Level Container menubar panel menu menuitem
Application Panel Contient les composants Architecture (2) Layout Agence les composants (taille, position) Layout (1) Objectif : Dispose les composants visuels Disposition formatée Prise en compte du redimensionnement Différents types : BorderPane Hbox Vbox StackPane GridPane FlowPane TilePane AnchorPane Layout (2) Exemple : public ChangeInstru() GridPane gridpane = new GridPane(); ImageView piano = new ImageView(new Image("images/piano.png")); piano.setfitheight(50); piano.setpreserveratio(true); ImageView guitare = new ImageView(new Image("images/guitare.png")); guitare.setfitheight(50); guitare.setpreserveratio(true); ImageView orgue = new ImageView(new Image("images/orgue.png")); orgue.setfitheight(50); orgue.setpreserveratio(true); gridpane.add(piano, 1, 0); gridpane.add(guitare, 1, 1); gridpane.add(orgue, 1, 2); gridpane.setvgap(15); this.getchildren().add(gridpane); Layout (3) Exemple : public FlowPane addflowpane() FlowPane flow = new FlowPane(); flow.setpadding(new Insets(5, 0, 5, 0)); flow.setvgap(4); flow.sethgap(4); flow.setprefwraplength(170); flow.setstyle("-fx-background-color: DAE6F3;"); ImageView pages[] = new ImageView[8]; for (int i=0; i<8; i++) pages[i] = new ImageView( new Image("graphics/chart_"+(i+1)+".png")); flow.getchildren().add(pages[i]); return flow;
Layout (4) Exemple : Graphiques, effets GaussianBlur BorderPane border = new BorderPane(); HBox hbox = addhbox() addstackpane(hbox) border.settop(hbox); border.setleft(addvbox()); border.setcenter(addgridpane()); border.setright(addflowpane()); InnerShadow (pour l exemple complet, voir http://docs.oracle.com/javafx/2/layout/builtin_layouts.htm) Reflection SepiaTone Transformations Ma première interface (1) Rectangle rect=new Rectangle(0,0,60,60); rect.setfill(color.dodgerblue); rect.setarcwidth(10); rect.setarcheight(10); rect.setrotate(45); rect.setscalex(2); rect.setscaley(0.5); Shear shear = new Shear(0.7, 0); rect.gettransforms().add(shear); rect.settranslatex(40); rect.settranslatey(10);
Ma première interface (2) Ma première interface (3) GridPane MenuBar HBox Text Menu Menu Label + TextField + Bouton public class MaFenetre extends Application public Scene construitscene() public void start(stage primarystage) mystage = primarystage; primarystage.settitle("ma première fenêtre"); primarystage.setscene(construitscene()); primarystage.sizetoscene(); primarystage.show(); public static void main(string[] args) launch(args); Ma première interface (4) Text text = new Text("Mon premier texte"); Separator separator = new Separator(); public Scene construitscene() GridPane grid = new GridPane(); MenuBar menubar = new MenuBar(); Menu menu1 = new Menu("Menu1"); Menu menu2 = new Menu("Menu2"); menubar.getmenus().addall(menu1,menu2); MenuItem menuitem1 = new MenuItem("MenuItem1"); menu1.getitems().addall(menuitem1,new MenuItem("MenuItem2")); Label label = new Label("Label: "); TextField textfield = new TextField(); textfield.setprompttext("champ texte"); button1 = new Button("Bouton1"); button1.settext("bouton"); HBox hbox = new HBox(5); hbox.getchildren().addall(label, textfield, button1); GridPane.setConstraints(menuBar, 0, 0); grid.getchildren().add(menubar); GridPane.setConstraints(hBox, 0, 1); grid.getchildren().add(hbox); GridPane.setConstraints(separator, 0, 2); grid.getchildren().add(separator); GridPane.setConstraints(text, 0, 3); grid.getchildren().add(text); StackPane root = new StackPane(); root.getchildren().addall(grid); Scene scene = new Scene(root, 500, 300); Scene scene = new Scene(root); return scene;
Gestion des événements (1) Définition : Message à destination de l'application : Existence d'une action Informations spécifiques à l'action Provenant soit d'une action utilisateur (saisie clavier, click souris, ). de l'application elle-même (exécution d'un Timer). Gestion des événements (2) Mécanisme : Action Event Listener Réponse Trois types d'objets: L objet qui reçoit l'événement (Button par exemple) L'événement en lui même (Event) L'objet qui traite cet événement (Listener) (notre Application, par ex.) Gestion des événements (3) spécifie : ce qu il doit attendre qui il doit prévenir si l évènement se produit. Button buttonok = new Button( OK ); Button.setOnAction(this); écoute les actions si une action arrive, envoie-la à this. Note : this référence la classe en cours (comme super la classe mère). Dans notre cas, this référence notre Application. Gestion des événements (4) L objet qui traite l évènement : - implémente le listener correspondant à l évènement, - traite l évènement. Par exemple : public class MaFenetre extends Application implements EventHandler<ActionEvent>... public void handle(actionevent event) System.out.println( Action!");
Gestion des événements (5) Gestion des événements (7) Ou directement : Différents types d événements :... button1.setonaction(this); button1.setonaction(new EventHandler<ActionEvent>() public void handle(actionevent event) System.out.println("Pour gérer l'événement directement!"); ); Références JFX Documentation : http://docs.oracle.com/javafx/ Présentation de Simon Ritter, JavaFX: Java's new Rich Client Platform Sur OpenClassRoom : http://fr.openclassrooms.com/informatique/cours/lesapplications-web-avec-javafx/ JavaFX-Dialogs : http://edu.makery.ch/blog/2012/10/30/javafx-2-dialogs/