我在javafx中创建了大约10个按钮,每个按钮onclick都假设以某种方式更改标签字段。我的问题是我不想为每个标签创建10种不同的方法我想使用一种方法然后测试按钮的id如果正确我会预先形成我想要的
我要问的例子
if (button.id == Info_205_btn) {
System.out.println("clicked");
subject_name.setText("stanly");
}
这是@math回答后的更新
这是我做的代码
@FXML
private void chooseSubject() {
for (int i = 0; i < buttonInfo.length; i++) {
buttonInfo[i] = new Button("Info"+i);
buttonInfo[i].setId("Info"+i);
int finalI = i;
buttonInfo[i].setOnAction(event -> checkID(buttonInfo[finalI]));
}
}
@FXML
private void checkID(Button button){
System.out.println("running");
if (button.getId().equals("Info0")) {
System.out.println("clicked");
subject_name.setText("stanly");
}
else if (button.getId().equals("Info1")) {
System.out.println("clicked");
subject_name.setText("stanly1");
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
chooseSubject();
}
同样点击我将方法chooseSubject放在FXML控制器
中答案 0 :(得分:1)
对于你的所有按钮,我认为你仍然需要放一个.setOnAction
,但你可以让它们都指向相同的功能
button.setOnAction(event -> checkID(button));
并从该函数检查id
private void checkID(Button button){
if (button.getId().equals("Info_205_btn")) {
System.out.println("clicked");
button.setText("stanly");
}
else if (button.getId().equals("Info_206_btn")) {
System.out.println("clicked");
button.setText("stanly");
}
//So on
}
此外,如果您将所有按钮放入列表中,或者如果它们已经在列表中,您可以遍历列表并以.setOnAction
方式执行
for (int i = 0; i < buttonList.length; i++)
button[i].setOnAction(event -> checkId((Button) event.getSource()));
这是我刚刚写的一个测试程序给你一个例子
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Button[] buttonList = new Button[10];
for (int i = 0; i < buttonList.length; i++) {
buttonList[i] = new Button("Button "+i);
buttonList[i].setId("Button"+i);
buttonList[i].setOnAction(event -> checkId((Button) event.getSource()));
}
VBox root = new VBox();
root.setAlignment(Pos.CENTER);
root.getChildren().addAll(buttonList);
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setWidth(200);
stage.setScene(scene);
stage.show();
}
private void checkId(Button button) {
for (int i = 0; i <= 10; i++) {
if(button.getId().equals("Button" + i))
if(!button.getText().equals("Button " + i + " Clicked"))
button.setText("Button " + i + " Clicked");
else
button.setText("Button " + i);
}
}
public static void main(String[] args) { launch(args); }
}
编辑:被带走了