Foundations of Programming 2: Javafx Basics
Foundations of Programming 2: Javafx Basics
JavaFX Basics
FoP 2 Teaching Team, Faculty of Computer Science, Universitas Indonesia
Correspondence: Fariz Darari ([email protected])
2
Why?
Not everything has to be in command-line interfaces (CLIs).
3
Why?
Not everything has to be in command-line interfaces (CLIs).
4
Intro
JavaFX is a library for creating GUIs in Java.
5
The very basics of JavaFX
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
} 6
The very basics of JavaFX
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
} 7
The very basics of JavaFX
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
9
Multiple stages
// ... other code parts follow previous code
public void start(Stage stg1) throws Exception {
stg1.setTitle("GUI 002");
stg1.setScene(new Scene(new Button("Gooo!"), 200,100));
stg1.show();
11
A pane is like a container
public void start(Stage stg1) throws Exception {
StackPane pn = new StackPane();
pn.getChildren().add(new Button("Niceee!")); // because Nice! would sound rude
Scene scn = new Scene(pn, 300, 100);
stg1.setScene(scn);
stg1.show();
}
Note that the button now doesn't occupy the whole scene, thanks to Pane!
12
Stacked square and button
public void start(Stage stg1) throws Exception {
Rectangle rect = new Rectangle(100, 100, 180, 140);
rect.setFill(Color.BLUE);
13
Stacked square and button
public void start(Stage stg1) throws Exception {
Rectangle rect = new Rectangle(100, 100, 180, 140);
rect.setFill(Color.BLUE);
14
Quiztime: Java art
15
Quiztime: Java art
public void start(Stage stg1) throws Exception {
StackPane pn = new StackPane();
for(int i = 100; i > 0; i--) {
Rectangle rect = new Rectangle(0,0,5*i,5*i);
switch(i % 3) {
case 0:
rect.setFill(Color.RED); break;
case 1:
rect.setFill(Color.GREEN); break;
case 2:
rect.setFill(Color.BLUE); break;
}
pn.getChildren().add(rect);
}
17
Circle
public void start(Stage stg1) throws Exception {
Circle c = new Circle();
c.setCenterX(200);
c.setCenterY(100);
c.setRadius(50);
c.setStroke(Color.ALICEBLUE);
c.setStrokeWidth(5);
c.setFill(Color.BISQUE);
18
Circle
public void start(Stage stg1) throws Exception {
Circle c = new Circle();
c.setCenterX(70);
c.setCenterY(100);
c.setRadius(50);
c.setStroke(Color.ALICEBLUE);
c.setStrokeWidth(5);
c.setFill(Color.BISQUE);
19
Circle
public void start(Stage stg1) throws Exception {
Circle c = new Circle();
c.setCenterX(70);
c.setCenterY(0);
c.setRadius(50);
c.setStroke(Color.ALICEBLUE);
c.setStrokeWidth(5);
c.setFill(Color.BISQUE);
20
Quiztime: Loops of circles
21
Solution
public Circle createCircle(int X, int Y) {
Random r = new Random();
Circle c = new Circle();
c.setCenterX(X);
c.setCenterY(Y);
c.setRadius(30);
c.setFill(Color.rgb(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
return c;
}
// ... cont
22
Solution
// ... cont
@Override
public void start(Stage stg1) throws Exception {
Pane pn = new Pane();
for(int i = 0; i < 5; i++)
for(int j = 0; j < 5; j++)
pn.getChildren().add(createCircle(50 + i*65,50 + j*65));
Scene scn = new Scene(pn, 360, 360);
stg1.setTitle("Circles");
stg1.setScene(scn);
stg1.setResizable(false);
stg1.show();
}
23
JavaFX provides many other shapes
24
Quiztime: We love buttons
25
Solution
@Override
public void start(Stage stg1) throws Exception {
VBox pn = new VBox();
pn.setAlignment(Pos.CENTER);
pn.setSpacing(20);
for(int i = 1; i <= 9; i++)
pn.getChildren().add(new Button("Button " + i));
Scene scn = new Scene(pn, 300, 500);
stg1.setTitle("We love buttons");
stg1.setScene(scn);
stg1.setResizable(false);
stg1.show();
}
26
Quiztime: We love horizontal
buttons
27
Solution
@Override
public void start(Stage stg1) throws Exception {
HBox pn = new HBox();
pn.setAlignment(Pos.CENTER);
pn.setSpacing(20);
for(int i = 1; i <= 9; i++)
pn.getChildren().add(new Button("Button " + i));
Scene scn = new Scene(pn, 800, 200);
stg1.setTitle("We love buttons");
stg1.setScene(scn);
stg1.setResizable(false);
stg1.show();
}
28
JavaFX Labels and Images
29
Solution
public void start(Stage stg1) throws Exception {
VBox pn = new VBox();
pn.setAlignment(Pos.CENTER);
pn.setSpacing(20);
pn.getChildren().add(new Label("Happy Ramadhan!"));
FileInputStream fis = new FileInputStream("pics/ramadhan.jpg");
Image img = new Image(fis);
ImageView iv = new ImageView(img);
iv.setFitHeight(400);
iv.setPreserveRatio(true);
pn.getChildren().add(iv);
Scene scn = new Scene(pn, 500, 500);
stg1.setTitle("Happy Ramadhan!");
stg1.setScene(scn);
stg1.setResizable(false);
stg1.show();
}
30
Quiztime: Create your own Happy Ramadhan
(or Merry X-Mas, or any greetings!
31
ChoiceBox
32
ChoiceBox: Code
public void start(Stage stg1) throws Exception {
VBox pn = new VBox();
pn.setAlignment(Pos.CENTER);
pn.setSpacing(20);
pn.getChildren().add(new Label("Pick your fav K-pop star!"));
String[] stars = {"Joo Ko-Wee", "Park Bo-Wow"};
ChoiceBox cb = new
ChoiceBox(FXCollections.observableArrayList(stars));
pn.getChildren().add(cb);
Scene scn = new Scene(pn, 180, 150);
stg1.setScene(scn);
stg1.setResizable(false);
stg1.show();
}
33
TextField
34
TextField: Code
public void start(Stage stg1) throws Exception {
HBox pn = new HBox();
pn.setAlignment(Pos.CENTER);
pn.setSpacing(20);
pn.getChildren().add(new Label("Who's fav K-pop star?"));
TextField tf = new TextField();
tf.setPrefWidth(150);
pn.getChildren().add(tf);
Scene scn = new Scene(pn, 300, 100);
stg1.setScene(scn);
stg1.show();
}
35
CheckBox
36
CheckBox: Code
public void start(Stage stg1) throws Exception {
VBox pn = new VBox();
pn.setAlignment(Pos.CENTER);
pn.setSpacing(20);
pn.getChildren().add(new Label("Who are your fav K-pop stars?"));
CheckBox cb1 = new CheckBox("Joo Ko-Wee");
CheckBox cb2 = new CheckBox("Park Bo-Wow");
CheckBox cb3 = new CheckBox("Sandiaga Yunho");
pn.getChildren().add(cb1);
pn.getChildren().add(cb2);
pn.getChildren().add(cb3);
Scene scn = new Scene(pn, 200, 200);
stg1.setScene(scn);
stg1.show();
}
37
Inspired by:
Liang, Introduction to Java, 10th edition, Pearson.
https://www.geeksforgeeks.org/
Google