Наиболее часто используемые элементы управления в JavaFX - это, без сомнения, кнопки и метки. Кнопки представлены классом javafx.scene.control.Button и позволяют по нажатию выполнять некоторые действия. А метки представлены классы javafx.scene.control.Label, и их задача - вывод текстовой информации. Класс Button унаследован от классов ButtonBase, Labeled, Region, Control, Parent и Node, а класс Label - от Labeled, Region, Control, Parent и Node. JavaFX позволяет создавать самые разнообразные кнопки и метки: с текстом, графикой, и тем и другим, с различными стилями.
Класс Button имеет три конструктора:
Button()
: создает кнопку без надписи
Button(String text)
: создает кнопку с определенной надписью
Button(String text, Node graphic)
: создает кнопку с определенной надписью и иконкой
Класс Label имеет три похожих конструктора:
Label()
: создает метку без надписи
Label(String text)
: создает метку с определенной надписью
Label(String text, Node graphic)
: создает метку с определенной надписью и иконкой
Ключевой возможностью кнопки является способность реагировать на нажатия пользователей и по нажтию выполнять некоторое действие. Для обработки нажатий в базовом классе ButtonBase определен метод setOnAction(), который устанавливает обработчик нажатия:
final void setOnAction(EventHandler<ActionEvent> handler)
В качестве параметра в этот метод передается реализация интерфейса EventHandler:
public interface EventHandler<T extends Event>{ void handle(T event); }
Используем кнопку в программе:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.Parent; import javafx.scene.layout.FlowPane; import javafx.scene.control.Label; import javafx.scene.control.Button; import javafx.event.ActionEvent; import javafx.event.EventHandler; public class Main extends Application{ int clicks = 0; public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) throws Exception { Label lbl = new Label("Counter"); lbl.setPrefWidth(70); Button btn = new Button("Click"); btn.setPrefWidth(80); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { clicks++; lbl.setText(String.valueOf(clicks)); } }); FlowPane root = new FlowPane(lbl, btn); Scene scene = new Scene(root); stage.setScene(scene); stage.setTitle("Hello JavaFX"); stage.setWidth(250); stage.setHeight(200); stage.show(); } }
В классе определена переменная-счетчик counter. И по нажатию на кнопку будет увеличиваться ее значение.