Skip to content

Commit c81fe2f

Browse files
authored
[BAEL-3946] Javafx adding ActionListener to button (#11701)
* Add implementation for article. * Add new line at the end of FXML layout file. * Remove default prefWidth from button, convert eventHandler to lambda. * Fix FXML file formatting.
1 parent 319d5cc commit c81fe2f

3 files changed

Lines changed: 104 additions & 0 deletions

File tree

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.baeldung.button.eventhandler;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
import javafx.event.ActionEvent;
7+
import javafx.event.EventHandler;
8+
import javafx.fxml.FXML;
9+
import javafx.scene.control.Button;
10+
import javafx.scene.control.Label;
11+
import javafx.scene.effect.DropShadow;
12+
import javafx.scene.effect.Effect;
13+
import javafx.scene.input.MouseButton;
14+
import javafx.scene.input.MouseEvent;
15+
import javafx.scene.text.Font;
16+
17+
public class ButtonEventHandlerController {
18+
19+
private static final Logger logger = LoggerFactory.getLogger(ButtonEventHandlerController.class);
20+
21+
@FXML
22+
private Button button;
23+
24+
@FXML
25+
private Label label;
26+
27+
@FXML
28+
private void initialize() {
29+
button.setText("Click me");
30+
31+
handleClickEvent();
32+
handleHoverEffect();
33+
reuseRightClickEventHandler();
34+
}
35+
36+
private void handleClickEvent() {
37+
button.setOnAction(new EventHandler<ActionEvent>() {
38+
@Override
39+
public void handle(ActionEvent event) {
40+
logger.info("OnAction {}", event);
41+
}
42+
});
43+
44+
button.setOnAction(event -> logger.info("OnAction {}", event));
45+
button.setOnAction(event -> logger.info("OnAction2 {}", event));
46+
}
47+
48+
private void handleHoverEffect() {
49+
Effect shadow = new DropShadow();
50+
button.setOnMouseEntered(e -> button.setEffect(shadow));
51+
button.setOnMouseExited(e -> button.setEffect(null));
52+
}
53+
54+
private void reuseRightClickEventHandler() {
55+
EventHandler<MouseEvent> rightClickHandler = event -> {
56+
if (MouseButton.SECONDARY.equals(event.getButton())) {
57+
button.setFont(new Font(button.getFont()
58+
.getSize() + 1));
59+
}
60+
};
61+
button.setOnMousePressed(rightClickHandler);
62+
label.setOnMousePressed(rightClickHandler);
63+
}
64+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.baeldung.button.eventhandler;
2+
3+
import javafx.application.Application;
4+
import javafx.fxml.FXMLLoader;
5+
import javafx.scene.Scene;
6+
import javafx.scene.layout.Pane;
7+
import javafx.stage.Stage;
8+
9+
public class Main extends Application {
10+
11+
public static void main(String[] args) {
12+
launch(args);
13+
}
14+
15+
@Override
16+
public void start(Stage primaryStage) throws Exception {
17+
FXMLLoader loader = new FXMLLoader(getClass().getResource("/button_event-handler.fxml"));
18+
Pane page = loader.load();
19+
20+
primaryStage.setTitle("Button event handler");
21+
primaryStage.setScene(new Scene(page));
22+
primaryStage.show();
23+
}
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<?import javafx.scene.control.*?>
4+
<?import javafx.scene.layout.*?>
5+
<BorderPane xmlns:fx="http://javafx.com/fxml"
6+
xmlns="http://javafx.com/javafx"
7+
fx:controller="com.baeldung.button.eventhandler.ButtonEventHandlerController"
8+
prefHeight="200.0" prefWidth="300.0">
9+
<center>
10+
<Button fx:id="button" HBox.hgrow="ALWAYS"/>
11+
</center>
12+
13+
<bottom>
14+
<Label fx:id="label" text="Test label"/>
15+
</bottom>
16+
</BorderPane>

0 commit comments

Comments
 (0)