javafx
кнопка
Поиск…
Добавление прослушивателя действий
Кнопки запускают события срабатывания при их активации (например, нажатие, привязка клавиш для кнопки нажата, ...).
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
Если вы используете Java 8+, вы можете использовать lambdas для прослушивателей действий.
button.setOnAction((ActionEvent a) -> System.out.println("Hello, World!"));
// or
button.setOnAction(a -> System.out.println("Hello, World!"));
Добавление графика к кнопке
Кнопки могут иметь графику. graphic
может быть любой узел JavaFX, например ProgressBar
button.setGraphic(new ProgressBar(-1));
ImageView
button.setGraphic(new ImageView("images/icon.png"));
Или еще одна кнопка
button.setGraphic(new Button("Nested button"));
Создать кнопку
Создание Button
прост:
Button sampleButton = new Button();
Это создаст новую Button
без текста или рисунка внутри.
Если вы хотите создать Button
с текстом, просто используйте конструктор, который принимает параметр String
as (который устанавливает textProperty
Button
):
Button sampleButton = new Button("Click Me!");
Если вы хотите создать Button
с графикой внутри или любым другим Node
, используйте этот конструктор:
Button sampleButton = new Button("I have an icon", new ImageView(new Image("icon.png")));
Кнопки по умолчанию и Отмена
Button
API предоставляет простой способ назначить общие сочетания клавиш кнопкам без необходимости доступа к списку ускорителей, назначенных для Scene
или явно прослушиванию ключевых событий. А именно, предоставляются два удобных метода: setDefaultButton
и setCancelButton
:
Установка
setDefaultButton
в значениеtrue
приведет к срабатываниюButton
при каждом событииKeyCode.ENTER
.Установка
setCancelButton
в значениеtrue
приведет к срабатываниюButton
каждый раз, когда он получает событиеKeyCode.ESCAPE
.
В следующем примере создается Scene
с двумя кнопками, которые запускаются при нажатии клавиш ввода или выхода, независимо от того, сфокусированы они или нет.
FlowPane root = new FlowPane();
Button okButton = new Button("OK");
okButton.setDefaultButton(true);
okButton.setOnAction(e -> {
System.out.println("OK clicked.");
});
Button cancelButton = new Button("Cancel");
cancelButton.setCancelButton(true);
cancelButton.setOnAction(e -> {
System.out.println("Cancel clicked.");
});
root.getChildren().addAll(okButton, cancelButton);
Scene scene = new Scene(root);
Приведенный выше код не будет работать, если эти KeyEvents
будут использованы любым родительским Node
:
scene.setOnKeyPressed(e -> {
e.consume();
});