Reputation: 23
I am making a basic calculator but I am unsure of how to check if a certain Button
has been clicked. I want to use an array of Button objects and then check to see if the button clicked matches a button object in the array. My code for this is below.
Button[] digitButtons = { bt0, bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9 };
for (int index = 0; index < 9; index++) {
int position = -1;
if (buttonClicked == digitButtons[index]) {
position = index;
break;
}
}
Upvotes: 2
Views: 16381
Reputation: 21799
Here is an example:
public class Main extends Application {
private int lastClickedIndex = -1;
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 400, 400);
Button[] digitButtons = new Button[10];
for(int i = 0; i < 10; i++) {
final int buttonInd = i;
digitButtons[i] = new Button(Integer.toString(i));
digitButtons[i].setOnAction(e -> {
System.out.println("Button pressed " + ((Button) e.getSource()).getText());
lastClickedIndex = buttonInd;
});
}
root.setCenter(new HBox(digitButtons));
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Note: It is unnecessary to get the index as the Button
is exactly specified as the event source: e.getSource()
.
Upvotes: 4
Reputation: 584
a simple way like
create 2 buttons call B1
and B2
, and add fx:id
for each button)
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="ask.FXMLDocumentController">
<children>
<Button fx:id="B1" layoutX="94.0" layoutY="106.0" text="B1" />
<Button fx:id="B2" layoutX="195.0" layoutY="106.0" text="B2" />
</children>
</AnchorPane>
use setOnAction
method to change value
Button name must same as what fx:id set
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
public class FXMLDocumentController implements Initializable {
@FXML Button B1;
@FXML Button B2;
int whichIsLastClicked = -1;
public void initialize(URL url, ResourceBundle rb)
{
B1.setOnAction(e->whichIsLastClicked=1);
B2.setOnAction(e->whichIsLastClicked=2);
}
}
Upvotes: 2