javafx
Knop
Zoeken…
Een actie-luisteraar toevoegen
Knoppen activeren actiegebeurtenissen wanneer ze worden geactiveerd (bijv. Geklikt, een toetsbinding voor de knop wordt ingedrukt, ...).
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
Als u Java 8+ gebruikt, kunt u lambdas gebruiken voor actieluisteraars.
button.setOnAction((ActionEvent a) -> System.out.println("Hello, World!"));
// or
button.setOnAction(a -> System.out.println("Hello, World!"));
Een afbeelding toevoegen aan een knop
Knoppen kunnen een afbeelding hebben. graphic
kan elk JavaFX-knooppunt zijn, zoals een ProgressBar
button.setGraphic(new ProgressBar(-1));
Een ImageView
button.setGraphic(new ImageView("images/icon.png"));
Of zelfs een andere knop
button.setGraphic(new Button("Nested button"));
Maak een knop
Een Button
is eenvoudig:
Button sampleButton = new Button();
Hiermee maakt u een nieuwe Button
zonder tekst of afbeelding erin.
Als u een Button
met een tekst wilt maken, gebruikt u gewoon de constructor die een String
als parameter gebruikt (die de textProperty
van de Button
textProperty
):
Button sampleButton = new Button("Click Me!");
Wilt u het creëren van een Button
met een grafische binnen of een ander Node
, gebruik dan deze constructeur:
Button sampleButton = new Button("I have an icon", new ImageView(new Image("icon.png")));
Standaard- en annuleerknoppen
Button
API biedt een eenvoudige manier om veelgebruikte sneltoetsen aan knoppen toe te wijzen zonder dat u toegang hoeft te hebben tot de lijst met versnellers die is toegewezen aan Scene
of expliciet luistert naar de belangrijkste gebeurtenissen. Er zijn namelijk twee setCancelButton
beschikbaar: setDefaultButton
en setCancelButton
:
Als u
setDefaultButton
optrue
wordt deButton
KeyCode.ENTER
telkens wanneer deze eenKeyCode.ENTER
gebeurtenis ontvangt.Als u
setCancelButton
optrue
wordt deButton
KeyCode.ESCAPE
telkens wanneer deze eenKeyCode.ESCAPE
gebeurtenis ontvangt.
In het volgende voorbeeld wordt een Scene
met twee knoppen die worden geactiveerd wanneer op enter- of escape-toetsen wordt gedrukt, ongeacht of deze zijn scherpgesteld of niet.
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);
De bovenstaande code werkt niet als deze KeyEvents
worden gebruikt door een bovenliggend Node
:
scene.setOnKeyPressed(e -> {
e.consume();
});