Поиск…


Добавление прослушивателя действий

Кнопки запускают события срабатывания при их активации (например, нажатие, привязка клавиш для кнопки нажата, ...).

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();
});


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow