Windows käsurida
Igale arvutile on töötamiseks paigaldatud operatsioonisüsteem (näiteks MS...
Selle mooduli viimase osana vaatame ka natuke Java graafilist osa, mille raames teeme pisikese kalkulaatori. Graafiline kasutajaliides (GUI, Graphical User Interface) on programmi liides, mis teeb võimalikuks kasutajal programmi lihtsamini juhtida. See tähendab, et programmiga suhtlemiseks ei pea kasutaja sisestama käske, vaid saab klikkida mõnele nupule. Javal on selleks mitu võimalust (AWT, SWT, Swing jt), millest meie vaatame JavaFX teeki.
JavaFX on teekide kogum (library), mis lubab luua graafilisi desktop- ja RIA-rakendusi (Rich Internet Applications) erinevatele platvormidele (Windows, MacOS, Linux). Selle kasutamiseks peab arvutisse olema paigaldatud e(fx)clipse. Kuna meie kasutame Eclipse’i, siis vaatame selle põhjal ka paigaldamise näidet:
Et oleks lihtsam alustada, on meil võimalik luua kohe JavaFX projekt. Tee faili aknas parem klikk ja vali New>Project…
Avanenud aknast vali JavaFX Project ja kliki Next.
Lisa projektile nimi ja vajuta Finish.
See tekitas meile faili Main.java, kus asub programmi põhikood ja application.css, mis lubaks programmi kujundada. Seekord me seda ei puudu.
Käivita kood ning kui kõik hästi on, siis luuakse 400x400px suurusega tühi programmiaken
JavaFX vajab käivitamiseks ülemklassi javafx.application.Application. Graafilise osa vastutab meetod start(), mis aktiveerub, kui JavaFX käivitub. Antud meetod, vajab ühte Stage parameetrit, kuhu kuvatakse kõik programmi visuaalne pool. Ja et me kõike seda päriselt näeksime, siis kasuta kindlasti show() meetodit.
Graafilise osa väljakutsumiseks täiesti start() meetodist piisaks. Kuid tavaliselt saad kaasa ka kohe main meetodi, mis sisaldab launch() käsku. See käivitab JavaFx runtime käsud.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package application; import javafx.application.Application; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) { primaryStage.setTitle("Java GUI harjutus"); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Sisu paigutuseks on olemas mitmeid võimalusi ja igaühel neist on midagi head: BorderPane, StackPane, GridPane, FlowPane,TilePane ja AnchorPane. Meie valime GridPane paigutusmeetodi. See tähendab, et saame ise jagada antud pinna ridadeks ja veergudeks, mille nummerdamine algab nullist.
Täpne arv, kui palju ridu ja veerge luuakse tuleb elemendite lisamisest.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package application; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; public class Main extends Application { @Override public void start(Stage primaryStage) { primaryStage.setTitle("Java GUI harjutus"); GridPane pane = new GridPane(); Scene scene = new Scene(pane,400,300); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Lisame dokumenti teksti (Label) ja tekstivälja (TextField) ning paigutame oma võrestikus veergudesse 1 ja 2 ning esimesse ritta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package application; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Main extends Application { @Override public void start(Stage primaryStage) { GridPane pane = new GridPane(); primaryStage.setTitle("Java GUI harjutus"); Scene scene = new Scene(pane,400,300); primaryStage.setScene(scene); Label nr1_label = new Label("Number 1:"); TextField nr1_txt = new TextField(); pane.add(nr1_label, 0, 0); pane.add(nr1_txt, 1, 0); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Kuna tekst on kastiga tihedalt koos, siis võiks lisada mõned vahed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package application; import javafx.application.Application; import javafx.geometry.Insets; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Main extends Application { @Override public void start(Stage primaryStage) { GridPane pane = new GridPane(); primaryStage.setTitle("Java GUI harjutus"); Scene scene = new Scene(pane,400,300); primaryStage.setScene(scene); pane.setPadding(new Insets(10, 10, 10, 10)); pane.setVgap(10); pane.setHgap(10); Label nr1_label = new Label("Number 1:"); TextField nr1_txt = new TextField(); pane.add(nr1_label, 0, 0); pane.add(nr1_txt, 1, 0); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Tekitame veel ühe teksti välja sisestuseks ja teise vastuse väljastamiseks ning lisame ka nupu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package application; import javafx.application.Application; import javafx.geometry.Insets; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Main extends Application { @Override public void start(Stage primaryStage) { GridPane pane = new GridPane(); primaryStage.setTitle("Java GUI harjutus"); Scene scene = new Scene(pane,400,300); primaryStage.setScene(scene); pane.setPadding(new Insets(10, 10, 10, 10)); pane.setVgap(10); pane.setHgap(10); Label nr1_label = new Label("Number 1:"); TextField nr1_txt = new TextField(); pane.add(nr1_label, 0, 0); pane.add(nr1_txt, 1, 0); Label nr2_label = new Label("Number 2:"); TextField nr2_txt = new TextField(); pane.add(nr2_label, 0, 1); pane.add(nr2_txt, 1, 1); Label vastus_label = new Label("Vastus:"); Label vastus = new Label("0"); pane.add(vastus_label, 0, 2); pane.add(vastus, 1, 2); Button nupp = new Button(); nupp.setText("Arvuta"); pane.add(nupp, 2, 3); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
Paneme alustuseks nupu tööle.
1 2 3 4 | nupp.setOnAction(event->{ System.out.println("Sain nupule pihta!"); }); |
Nüüd kui nupule klikkida, kuvatakse konsooli aknas antud tekst.
Kui see töötab, siis saame võtta teksti väljadest arvud, teha tehte ja väljastada vastuse.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package application; import javafx.application.Application; import javafx.geometry.Insets; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Main extends Application { @Override public void start(Stage primaryStage) { GridPane pane = new GridPane(); primaryStage.setTitle("Java GUI harjutus"); Scene scene = new Scene(pane,400,300); primaryStage.setScene(scene); pane.setPadding(new Insets(10, 10, 10, 10)); pane.setVgap(10); pane.setHgap(10); Label nr1_label = new Label("Number 1:"); TextField nr1_txt = new TextField(); pane.add(nr1_label, 0, 0); pane.add(nr1_txt, 1, 0); Label nr2_label = new Label("Number 2:"); TextField nr2_txt = new TextField(); pane.add(nr2_label, 0, 1); pane.add(nr2_txt, 1, 1); Label vastus_label = new Label("Vastus:"); Label vastus = new Label("0"); pane.add(vastus_label, 0, 2); pane.add(vastus, 1, 2); Button nupp = new Button(); nupp.setText("Arvuta"); pane.add(nupp, 2, 3); nupp.setOnAction(event->{ int arv1 = Integer.parseInt(nr1_txt.getText().toString()); int arv2 = Integer.parseInt(nr2_txt.getText().toString()); int korrutis = arv1 * arv2; vastus.setText(String.valueOf(korrutis)); }); primaryStage.show(); } public static void main(String[] args) { launch(args); } } |