javafx
Knapp
Sök…
Lägga till en actionlyssnare
Knappar avfyrar händelser när de aktiveras (t.ex. klickas, en knappbindning för knappen trycks in, ...).
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
Om du använder Java 8+ kan du använda lambdas för actionlyssnare.
button.setOnAction((ActionEvent a) -> System.out.println("Hello, World!"));
// or
button.setOnAction(a -> System.out.println("Hello, World!"));
Lägga till en grafik på en knapp
Knappar kan ha en grafik. graphic
kan vara vilken JavaFX-nod som helst, som en ProgressBar
button.setGraphic(new ProgressBar(-1));
En ImageView
button.setGraphic(new ImageView("images/icon.png"));
Eller till och med en annan knapp
button.setGraphic(new Button("Nested button"));
Skapa en knapp
Skapa en Button
är enkel:
Button sampleButton = new Button();
Detta skapar en ny Button
utan text eller grafik inuti.
Om du vill skapa en Button
med en text använder du bara konstruktören som tar en String
som parameter (som anger textProperty
för Button
):
Button sampleButton = new Button("Click Me!");
Om du vill skapa en Button
med en grafik inuti eller någon annan Node
använder du denna konstruktör:
Button sampleButton = new Button("I have an icon", new ImageView(new Image("icon.png")));
Standard- och Avbryt-knappar
Button
API ger ett enkelt sätt att tilldela vanliga kortkommandon till knappar utan att behöva komma åt acceleratorlistan tilldelad Scene
eller uttryckligen lyssna på nyckelhändelserna. Två bekvämlighetsmetoder tillhandahålls nämligen: setDefaultButton
och setCancelButton
:
setDefaultButton
ställersetDefaultButton
tilltrue
kommerButton
att avfyras varje gång den får enKeyCode.ENTER
händelse.setCancelButton
ställersetCancelButton
tilltrue
kommerButton
att avfyras varje gång den får enKeyCode.ESCAPE
händelse.
Följande exempel skapar en Scene
med två knappar som avfyras när man trycker på Enter- eller Escape-tangenterna, oavsett om de är fokuserade eller inte.
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);
Koden ovan fungerar inte om dessa KeyEvents
konsumeras av någon överordnad Node
:
scene.setOnKeyPressed(e -> {
e.consume();
});