You will want to download the program
Hello.java
to read this page. Make sure you butcher it, experiment it, and
modify it in your explorations.
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
public class Hello extends Application
{
int clickCount;
public Hello()
{
super();
clickCount = 0;
}
@Override
public void start(Stage primary)
{
primary.setTitle("Hello, World");
Group root = new Group();
System.out.println(root);
Scene scene = new Scene(root, 300,250);
Circle circ = new Circle(40, 40, 30);
Button b = new Button("Click me!!");
b.setLayoutX(100);
b.setLayoutY(80);
b.setOnAction(e-> {
clickCount++;
b.setText("" + clickCount);
});
root.getChildren().add(b);
root.getChildren().add(circ);
primary.setScene(scene);
primary.show();
}
public static void main(String[] args)
{
Application.launch(args);
}
}
We will step through this in its entirety.
What is your frame of mind?
We assume you are familiar with using Swing and AWT to program
graphically. The Application is the outer skin
for your app; it plays the same role that JFrame
plays in Swing.
The Application class has one constructor, which is
just the default constructor. Once the Application
object is constructed, the init() method is called.
This method, by default, does nothing. You can use it to help set up
housekeeping in your app. This method runs in its own thread.
Our class has a state variable clickCount that keeps
track of the number of times the button in the window has been
clicked. It is initialized explicitly in the constructor.
The class has a main method that calls the static
method Appliction.launch(). This method is called
to get the application to run. It should remind you of the use
of javax.swing.SwingUtilities.invokeLater() that runs
an app's run method and which ensures order in the
event queue.
What is a stage? A stage is a top-level container
for an app within the Application framework. The
Scene object behaves like a content pane.
The start method begins the JavaFX Application thread,
which functions much like Swing's Event Dispatch Thread. The
scene object can hold zero or more nodes, each of which represents
a graphical object.
A Group holds a collection of graphical widgets. The
getChildren() method exposes this list so you can add
items to it. Notice that we add a Circle and a
Button object to the root Group.
The root group is added to a scene and this scene
is displayed on the screen.